聚合
聚合的语法规则如下
SELECT [field1,field2,...fieldn] fun_name
FROM tablename
[WHERE where_condition]
[GROUP BY field1,field2,...fieldn
[WITH ROLLUP]]
[HAVING where_condition]
其中
- fun_name表示要做的聚合操作,常用的有sum,count,max,min
- GROUP BY指定要进行聚合的字段
- WITH ROLLUP是可选语法,表明是否对分类聚合后的结果进行再汇总
- HAVING关键字表示对分类后的结果再进行条件过滤
having和where的区别:having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤。如果条件允许,我们应当尽可能用where先过滤记录,因为这样结果集减少,会大大提高聚合的效率,最后再根据逻辑看是否用having进行再过滤
表连接
表连接又分为两种,分别是
- 内连接:仅选出两张表中互相匹配的及记录
- 外连接:会选出两张表中其他不匹配的记录
外连接由可以分为两种:
- 左连接:结果集包含左表中所有的记录,右表没有与其匹配的记录也展示
- 右连接:结果集包含右表中所有的记录,左表没有与其匹配的记录也展示
子查询
子查询比较简单,可以理解为嵌套查询。外层的查询条件依赖于内层的查询结果。
常用关键字有:in、not in、=、!=、exists、not exists
注意:表连接很多情况下优于子查询! 所以优先选择表连接进行查询。
记录联合
记录联合,顾名思义,就是将结果集再联合起来。语法规则如下:
SELECT * FROM t1
UNION|UNION ALL
SELECT * FROM t2
...
UNION|UNION ALL
SELECT * FROM tn
其中,
union和union all的主要区别是union all是把结果集直接合并在一起,而union是将union all后的结果进行一次distinct,去除重复记录后的结果。(union反而比union all更多一步,有点违反常理)