我爱编程

SQL杂记_day01

2018-04-16  本文已影响0人  感觉变强了

       本记录旨在记录以及回忆常用的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

SELECT prod_name, prod_price

FROM Products

WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'

               AND prod_price >= 10;

先计算 (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;

结果不同
上一篇下一篇

猜你喜欢

热点阅读