SQL杂记_day01
本记录旨在记录以及回忆常用的Sql语句,关键字(太基础如select就算了),以数据分析为根本目的,服务于分析,因此需要常做更新,切勿死磕一点,木有意义,会用即可;还有一点,就是记性好像不怎么好,所以需要这么一个随笔来进行记录。一下内容大部分都取自《sql必知必会》,做一个总结。
关于环境的搭建问题,仅仅是练习熟悉sql的话,不需要使用可视化工具,搭建完整的环境(如安装mysql,SQLyog等),直接使用PHPstudy这个工具的数据库工具即可,快速绿色,敲命令行完成练习,足够。
关于SQL语句通用性的问题,不同的数据库,在某些功能上会有不同的sql实现方法,当前练习的版本仅仅是以mysql为基准,所以以下语句都是在mysql 5.5 运行练习。如果语句不通用,则会标注出来
开始正题 Let`s do it !:
1、检索不同的值DISTINCT
输入:
SELECT DISTINCT vend_id
FROM Products;
输出:
vend_id
----------
BRS01
DLL01
FNG01
由此可见它的作用就是检索出选中列中的所有不同的行,很简单,但有一点需要注意:
以最长的不重复列为标准注意:不能部分使用 DISTINCT
DISTINCT作用于select后的所有列,不仅仅是紧跟着 DISTINCT后的那一列,例如:
SELECT DISTINCT vend_id, prod_price 则得出的结果如下:
2、输出限定数目的结果 LIMIT(只适用于mysql DB)
两种语句方式:
SELECT prod_name 或者 SELECT prod_name
FROM Products FROM Products
LIMIT 4 OFFSET 3; LIMIT 3, 4;
以上两种方法得到的结果都是:
从第三行开始,选取四行输出LIMIT 4 OFFSET 3 是指输出四行,从行号为3的行开始;
LIMIT 3, 4; 是指从行号为3的行开始,输出四行;(意义相同,这句为简化版本)
PS:行号是从0开始的
3、对所选择的列进行排序 ORDER BY
1)ORDER BY一定是SELECT语句中的最后一个语句,此处解释一下:SELECT语句就是指的 SELECT....FROM....语句,ORDER BY使用的时候必须紧跟在这条语句之后,之后在使用其他语句,比如LIMIT等;但如果出现了WHERE语句,ORDER BY就要位于WHERE之后使用
如:
SELECT prod_id, prod_price, prod_name
FROM Products
LIMIT 3, 4
ORDER BY 2, 3;
就是错误的!
2)默认的的排序顺序是升序ASC(或ASCENDING),数字的序低于字母(先数字后字母)
3)降序是DESC(或DESCENDING)
4)多个列排序:
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC, prod_name;
以上是对prod_price进行降序,之后再对prod_name升序(只有在prod_price中出现相同的值时,才会开始对prod_name升序排序;不存在相同时,就按着prod_price降序排序),如:
以上语句执行后的结果5)使用相对位置来进行排序:
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY 2 DESC, 3;
此条语句执行结果和 4)结果相同,相对位置是指SELECT所选择的列的相对书写位置
6)关于大小写的排序区别:
就如A和a该如何排序,这个就和数据库的具体设置有关了,找管理员,在此就不深究,遇到问题再解决
4、关于WHERE语句的一些总结:
以上是WHERE中可以使用的操作符1)其实以上列出的有些操作符是冗余的,如"<>",就可以使用" != "来代替, " !< "相当于" >= ",并非所有的DB都支持这些操作符!
2)对于值是字符串的列,需要使用单引号来限定。
SELECT vend_id, prod_name
FROM Products
WHERE vend_id != 'DLL01';
3)取范围值BETWEEN
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;
此处需要注意,是包含5和10的,也就是包含开始和结束值!
4)匹配空值NULL要使用 IS NULL 语句:
空值不代表值为0,是指的没有填充值!
语句执行结果SELECT cust_name
FROM CUSTOMERS
WHERE cust_email IS NULL;
5)WHERE语句中的 AND 和 OR:
此处一定要注意结合顺序,AND结合优先级高于OR,也就是先和计算 AND,之后计算 OR
先计算 (vend_id = 'BRS01' AND prod_price >= 10)SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
AND prod_price >= 10;
结果不同SELECT prod_name, prod_price
FROM Products
WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01')
AND prod_price >= 10;