Having与Where的区别
- where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚合函数,使用where条件过滤出特定的行。
- having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚合函数,使用having条件过滤出特定的组,也可以使用多个分组标准进行分组。
count()函数
- count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL。
- count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL。
- count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(NULL)的计数,即某个字段值为NULL时,不统计。
UNION函数
1、UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2]
2、UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2]
UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
- 1.对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,UNION ALL不会去除重复记录。
- 2.对排序的处理:UNION将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。
- 3.从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。
IN函数
SELECT * FROM customers WHERE City IN ('New York', 'Los Angeles', 'Chicago').
可以不用多个OR ,单用一个IN就可以实现查到所要城市的所有列。
NOT IN函数
SELECT * FROM customers WHERE City NOT IN ('New York', 'Los Angeles', 'Chicago').