本文已参与「新人创作礼」活动,一起开启掘金创作之路。
聚合函数
聚合函数通常对 GROUP BY 语句进行分组后的每个分组起作用,即,如果在查询语句中不使用 GROUP BY 对结果集分组,则聚合函数就对结果集的所有行起作用。
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
分组查询
在实际的应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行操作。
即使用GROUP BY 按某个字段或者多个字段进行分组。(按分组条件分组后每一组只会显示第一条记录)
- 分组函数必须先分完组之后才能使用
注意点:
- GROUP BY 应该位于where语句的后面(先过滤,后排序)
- HAVING和WHERE的作用相同,区别在于HAVING 条件可以和聚合函数使用,而WHERE 关键字不能。
- HAVING 关键字需和GROUP BY一起使用,用于对分组后的结果进行过滤。
- where 用于分组之前的过滤,而 having 是分组之后的
从优化策略考虑: where和 having,优先选择where, where实在完成不了了,再选择having
排序
Order by 可以对查询结果进行排序
在该语法中指定的字段名是对查询结果进行排序的依据,ASC表示升序排列,DESC 表示降序排列,默认情况是升序排列。(order by 语句一般写在最后)
查询执行的顺序
- from
- where
- group by
- having
- select
- order by
- limit
多表查询
内连接:
解释:只列出这些连接表中与连接条件相匹配的数据行。
INNER可以不写,则默认为内连接。 [ON join_condition]里面写的是连接的条件。
外连接:
语法:
解释:不仅列出与连接条件(on)相匹配的行,还列出左表table1(左外连接)、或右表table2(右外连接)、或两个表(全外连接)中所有符合WHERE过滤条件的数据行。
- 左连接的含义是:在内连接的基础上增加左边有右边没有的结果
- 右连接是左连接的相反。
- 全连接在mysql不支持
子查询
作用:子查询是将一个查询语句嵌套在另一个查询语句中
定义:内层查询语句的查询结果,可以作为外层查询语句提供的查询条件。先执行子查询,根据子查询的结果,再执行主查询。
关键字:用于子查询可以包括IN、NOT IN、EXIST、NOT EXIST、=、<>等(符号“<>”的意思是:不等于)。
第四句其实就把前两句给结合起来了。
- 不要嵌套太多子查询,消耗资源。