MySql基础/04.DQL查询语句-排序和分组
只愿君心似我心,定不负相思意。
——李之仪《卜算子》
第一部分 DQL查询语句
1.1 排序
asc 升序,默认值
desc 降序
通过order by 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)
1 | -- 语句 |
1.1.1 单列排序
什么是单列排序?
只按某一个字段进行排序
1 | -- 查询所有数据,使用年龄降序排序 |
1.1.2 组合排序
什么是组合排序?
同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推。
1 | select * from 表名 where 字段=值 order by 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC]; |
1.2 聚合函数
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。聚合函数会忽略空值 null。
SQL 中的聚合函数 | 作用 |
---|---|
max(列名) | 求这一列的最大值 |
min(列名) | 求这一列的最小值 |
avg(列名) | 求这一列的平均值 |
count(列名) | 统计这一列有多少条记录 |
sum(列名) | 对这一列求总和 |
1 | select 聚合函数(列名) from 表名; |
通过演示发现对于 null 的记录不会统计,建议如果统计个数则不要使用有可能为 null 的列。
但如果需要把 null也统计进去呢?怎么办?
1 | -- 如果列名不为空,返回这列的值。如果为 NULL,则返回默认值。 |
1.3 分组
分组查询是指使用 group by 语句对查询信息进行分组,相同数据作为一组。
1 | select 字段 1,字段 2... from 表名 group by 分组字段 [having 条件]; |
分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
注意:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的
1 | -- 按性别进行分组,求男生和女生数学的平均分 |
sex | avg(math) |
---|---|
男 | 98.50 |
女 | 99.50 |
实际上是将每组的 math 求了平均,返回每组统计的结果
1 | -- 查询年龄大于 25 岁的人, |
注意:group by 后面不要用where
having 与 where 的区别
子名 | 作用 |
---|---|
where 子句 | 1. 对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之前过滤数据,即先过滤 再分组。 2. where 后面不可以使用聚合函数 |
having 子句 | 1. having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。 2. having 后面可以使用聚合函数 |
1.4 limit语句
limit的作用:
限制的意思,作用就是限制查询记录的条数。
1 | select * from 表名 [where 字句] [group by 字句] [having 字句] [order by字句] [limit 字句]; |
limit的使用场景:
分页:比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的条数。 假设我们每页显示 5 条记录的方式来分页。