DQL: 排序查询、聚合函数、分组查询、分页查询

本贴最后更新于 1708 天前,其中的信息可能已经物是人非

1. 排序查询 order by

  • 语法:order by 子句
    • order by 排序字段 1 排序方式 1 , 排序字段 2 排序方式 2...
  • 排序方式:
    • ASC:升序,默认的。
    • DESC:降序。
  • 注意:
    • 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
  • 单列排序
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];
-- 查询所有数据,使用年龄降序排序
select * from student order by age desc;
  • 组合排序
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];
-- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序
select * from student order by age desc, math asc;

2.聚合函数:

  • count:计算个数
    • 一般选择非空的列:主键
    • count(*)
  • max:计算最大值
  • min:计算最小值
  • sum:计算和
  • avg:计算平均值

注意:聚合函数的计算,排除 null 值。

  • 解决方案:
    • 选择不包含非空的列进行计算
    • IFNULL 函数
  • 语法:
SELECT 聚合函数(列名) FROM 表名;
-- 查询学生总数
select count(id) as 总人数 from student;
select count(*) as 总人数 from student;
  • IFNULL(列名,默认值):
    如果列名不为空,返回这列的值。如果为 NULL,则返回默认值。
-- 查询id字段,如果为null,则使用0代替
select ifnull(id,0) from student;
-- 我们可以利用 IFNULL()函数,如果记录为 NULL,给个默认值,这样统计的数据就不会遗漏
select count(ifnull(id,0)) from student;
  • 练习:
-- 查询年龄大于20的总数
select count(*) from student where age>20;
-- 查询数学成绩总分
select sum(math) 总分 from student;
-- 查询数学成绩平均分
select avg(math) 平均分 from student;
-- 查询数学成绩最高分
select max(math) 最高分 from student;
-- 查询数学成绩最低分
select min(math) 最低分 from student;

3. 分组查询: GROUP BY

分组的目的就是为了统计,一般分组会跟聚合函数一起使用。

  • 语法:

分组查询是指使用 GROUP BY 语句对查询信息进行分组,相同数据作为一组

SELECT 字段 1,字段 2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];
  • having 与 where 的区别:
子名 作用
where 子句 (1) 对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之前过滤数据,即先过滤 再分组。 (2) where 后面不可以使用聚合函数
having 子句 (1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。 (2) having 后面可以使用聚合函数
-- 按照性别分组。分别查询男、女同学的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数
SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
--  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
--  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;

4. 分页查询 limit

  • limit 的作用:
    • LIMIT 是限制的意思,所以 LIMIT 的作用就是限制查询记录的条数。
SELECT *|字段列表 [as 别名] FROM 表名 [WHERE子句] [GROUP BY子句][HAVING子句][ORDER BY子 句][LIMIT 子句];
  • 语法:
    • limit 开始的索引,每页查询的条数;
  • 公式:
    • 开始的索引 = (当前的页码 - 1) * 每页显示的条数
-- 每页显示3条记录
SELECT * FROM student LIMIT 0,3; -- 第1页
SELECT * FROM student LIMIT 3,3; -- 第2页
SELECT * FROM student LIMIT 6,3; -- 第3页
  • SQL
    127 引用 • 386 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...