排序 分组 聚合 多表查询 合并查询 子查询

4.1排序

通过 ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示效果,不会影响真实数据)

  1. # 默认是asc,升序排序;desc表示降序排序
  2. select 字段名 from 表名 where 条件 order by 字段名 desc;
  3. # 组合排序
  4. # 在字段1排序的基础上,再使用字段2进行排序, 如果字段1值相同就以字段2做降序排序
  5. select * from 表名 order by 字段1 desc, 字段2 desc;

4.2聚合函数

例如:求员工最高工资/平均工资/工资总和,都是聚合函数来做的之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对某一列的值进行计算,然后返回一个单一的值(另外聚合函数会忽略 null 空值)。

  • 聚合,也称为聚合统计或者聚合查询,就需要使用 select 关键字,有 select 就得有 from xxx :::warning select 聚合函数(字段名) form 表名; ::: | 聚合函数 | 作用 | | —- | —- | | count() | 统计指定列不为NULL的记录行数 | | sum() | 计算指定列的数值和 | | max() | 计算指定列的最大值 | | min() | 计算指定列的最小值 | | avg() | 计算指定列的平均值 |

4.3 分组

分组往往和聚合函数一起时候,对数据进行分组,分完组之后在各个组内进行聚合统计分析。 :::warning SELECT 列名1, count(列名2)
FROM table
[WHERE condition]
[GROUP BY 列名1 [HAVING<条件表达式>]]
[ORDER BY 列名2 [asc/desc]];
::: 1) 需要在分组后,对数据进行过滤,使用 关键字 having
2) 分组操作中的 having子句,是用于在分组后对数据进行过滤的,作用类似于where条
件。
注意:

  • group by 的字段必须出现在 select 的位置
  • select 的位置,除了 group by 的字段、聚合函数,不能出现其他字段

where 与 having的区别

过滤方式 特点
where where 在进行分组前过滤
where 后面不能写 聚合函数
先筛选数据再关联,执行效率高
having having 在分组后进行过滤
having 后面可以写聚合函数
在最后的结果集中进行筛选,执行效率低

开发中的选择:
WHERE 和 HAVING 也不是互相排斥的,我们可以在一个查询里面同时使用 WHERE 和 HAVING。包含分组 统计函数的条件用 HAVING,普通条件用 WHERE。这样,我们就既利用了 WHERE 条件的高效快速,又发 挥了 HAVING 可以使用包含分组统计函数的查询条件的优点。当数据量特别大的时候,运行效率会有很 大的差别。

4.4 limit关键字

limit 是限制的意思,用于 限制返回的查询结果的行数 (可以通过 limit 指定查询多少行数据)。
limit 语法是 MySql 的方言,用来完成分页

  1. # offset--起始行数,从0开始计数,省略则默认为0
  2. # length--返回的行数
  3. limit offset,length;
  4. # 查询student表中的前 5条数据
  5. select * from student limit 5; # 即第0,1,2,3,4条
  6. # 查询student表中 从第4条开始,查询6条
  7. select * from student limit 3,6; # 即第3,4,5,6,7,8条