4.1排序
通过 ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示效果,不会影响真实数据)
# 默认是asc,升序排序;desc表示降序排序
select 字段名 from 表名 where 条件 order by 字段名 desc;
# 组合排序
# 在字段1排序的基础上,再使用字段2进行排序, 如果字段1值相同就以字段2做降序排序
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 的方言,用来完成分页
# offset--起始行数,从0开始计数,省略则默认为0
# length--返回的行数
limit offset,length;
# 查询student表中的前 5条数据
select * from student limit 5; # 即第0,1,2,3,4条
# 查询student表中 从第4条开始,查询6条
select * from student limit 3,6; # 即第3,4,5,6,7,8条