SQL语句学习之DQL(二)

240 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

写在前面👀

承接上文,今天继续学习DQL查询功能

一、排序查询🚗

关键字:ORDER BYASC(升序,默认值),DESC(降序)

1️⃣单列排序🚌

  • 只按一个字段进行排序
/* 语法 */
SELECT 字段名 FROM 表名 WHERE 条件 ORDER BY 字段名 [ASC|DESC];
/* 示例 */
-- 以数学成绩升序
SELECT * FROM stu_info ORDER BY math ASC;
  • 演示结果如下👇

2️⃣组合排序🚐

  • 同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推
/* 语法 */
SELECT 字段名 FROM 表名 WHERE 条件 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];
/* 示例 */
-- 在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序
SELECT * FROM stu_info ORDER BY age DESC, math ASC;
  • 演示结果如下👇image-20220407215304877

二、聚合函数🚓

之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数(又叫组合函数)查询是纵向查询,是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。

1️⃣常用聚合函数🚎

  • 注意:COUNT(*)函数外,其它聚合函数在执行计算时会忽略NULL
  • 聚合函数不能嵌套调用
  • 语法:SELECT 聚合函数(列名) FROM 表名;
聚合函数作用
COUNT(列名)统计这一列有多少条记录
MAX(列名)求这一列的最大值
MIN(列名)求这一列的最小值
AVG(列名)求这一列的平均值
SUM(列名)对这一列求和

2️⃣一些示例🚑

1.COUNT函数🚘

  • COUNT(*)返回表中记录总数,适用于任意数据类型
  • COUNT(列名) 返回不为空的记录总数。
-- 查询学生总数
SELECT COUNT(*) AS 总人数 FROM stu_info;
-- 查询参与数学考试的学生人数
SELECT COUNT(math) AS 参加数学考试人数 FROM stu_info;
  • 演示结果如下👇
    • 查询学生总数image-20220407215503845
    • 查询参与数学考试的学生人数image-20220407215542207

2.MAXMINSUMAVG函数🚔

-- 查询数学成绩最高分、最低分、总分、平均分
SELECT MAX(math) 最高分,MIN(math) 最低分,SUM(math) 总分,AVG(math) 平均分 FROM stu_info;
  • 演示结果如下👇image-20220407215648185

三、分组查询🚕

关键字:GROUP BYHAVING

在 MySQL 中, GROUP BY 子句用于将结果集根据指定的字段或者表达式进行分组。

1️⃣GROUP BY 如何分组🚒

  1. 聚合函数,用来汇总。可选,但是一般都用得到。
  2. SELECT 后的字段必须是分组字段中的字段。至少一个字段,也可以多个字段。
  3. WHERE 子句是可选的,用来过滤分组前的数据。
  4. HAVING 子句是可选的,用来过滤分组后的数据。
/* 语法 */
SELECT 字段 1,字段 2...聚合函数 FROM 表名 GROUP BY 分组字段 [HAVING 条件];
/* 示例 */
-- 查询年龄大于等于16 岁的人,按性别分组,统计每组的人数
SELECT gender AS 性别,COUNT(*) AS 人数 FROM stu_info WHERE age>=16 GROUP BY gender ;
  • 演示结果如下👇image-20220407220529760

2️⃣HAVING和WHERE的区别🚚

子句作用
WHERE1. 在分组前,将不符合WHERE条件的行过滤,即分组前过滤数据
2. WHERE不可以使用聚合函数
3. 必须在GROUP BY语句前面使用
HAVING1. HAVING 作用是筛选满足条件的组,即分组后过滤数据
2. HAVING可以使用聚合函数
3. 必须在GROUP BY语句后面使用
/* 示例 */
-- 查询年龄大于等于 16 岁的人,按性别分组,统计每组的人数,并只显示性别人数大于 2 的数据
SELECT gender AS 性别, COUNT(*) AS 人数 FROM stu_info WHERE age >= 16 GROUP BY gender HAVING COUNT(*) >2;
  • 演示结果如下👇image-20220407220703911

四、分页查询🛺

关键字:LIMITLIMIT 的作用就是限制查询记录的条数

1️⃣LIMIT语法格式🚛

/* 语法 */
LIMIT offset,row_count;
/* 示例 */
-- 最多返回三条记录,等效于 LIMIT 0,3
LINMT 3;
-- 跳过2条记录,并从第3条记录开始,最多返回5条记录
LIMIT 2,5
  1. 从 0 开始计数
  2. offset:起始行数,如果省略,默认是 0
  3. row_count: 执行要返回的最大行数
  4. LIMIT 一般位于 SELECT 语句的最后。

2️⃣LIMIT应用场景🚜

在 SELECT 语句中, LIMIT 子句经常和 ORDER BY 子句结合使用。比如在下面的场景中:

  • 班里分数最高的 10 位同学
  • 每月播放量前十的视频
  • 博客的文章分页列表
/* 语法 */
SELECT *|字段列表 [as 别名] FROM 表名 [WHERE 子句] [GROUP BY 子句][HAVING 子句][ORDER BY 子句][LIMIT 子句];
/* 示例 */
-- 班里数学分数最高的三位同学,并按降序排序
SELECT * FROM stu_info  ORDER BY math DESC LIMIT 0,3 ;
  • 演示结果如下👇image-20220407222421245

写在后面🍻

感谢观看啦✨
有什么不足,欢迎指出哦💖
掘金的运营同学审核辛苦了💗