MySQL 视频课 · 50 集 / 组
DQL 进阶:分组、排序、分页、综合案例、执行顺序
P18–P23 · 共 6 集 · 每集独立 anchor,可直接从目录跳到本页某一集
视频 p=18 · 时长 10:18
P18 18. 基础-SQL-DQL-分组查询
原视频:在 B 站新标签打开(p=18) · 单独打开这一集 →
看视频,对照阅读:在新标签打开原视频(p=18)
分组查询把“逐行看”换成“按类看”。本集重点是 GROUP BY 配聚合函数,再用 HAVING 筛组。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
把行按某一列的值分成几堆,再对每一堆算一个汇总数——这就是分组查询。
按这 4 步做
- 先用 WHERE 把不要的行筛掉,这时还不知道最后会分几组。比如写 WHERE age < 30,先只留下符合条件的行。
- 再用 GROUP BY dept_id 按部门把这些行分堆,每个不同的 dept_id 值成为一堆。 分组列可以写多个(如
GROUP BY gender, dept_id):先按第一列分,相同再按第二列分。 - SELECT 里只写分组列和聚合函数,例如 COUNT(*)、AVG(salary),数据库会对每一堆各算一个值。
- 对“堆”的条件写在 HAVING 里,比如只保留人数 ≥ 2 的组;它和 WHERE 的位置不同,作用对象也不同。
小例
SELECT dept_id, COUNT(*) AS 人数, ROUND(AVG(salary), 0) AS 平均薪资
FROM employee
WHERE age < 30
GROUP BY dept_id
HAVING COUNT(*) >= 2;
【原创演示】依赖前面给出的 employee 四行练习数据(小林 22/dept1/8000,小周 25/dept1/10000,小陈 30/dept2/12000,小李 21/NULL/NULL),不用额外建表。WHERE 先去掉 30 岁的小陈;剩下小林、小周在部门 1,小李的 dept_id 是 NULL,自成一堆。HAVING 只留人数 ≥ 2 的堆,于是只剩部门 1:人数 2,平均薪资 9000。结果一行:1、2、9000。
易错点
- 在 SELECT 里写 name 这类没参与分组的列:默认开启 ONLY_FULL_GROUP_BY 时会直接报错,而不是随手给你一条记录。
- 把 COUNT(*) >= 2 写进 WHERE:WHERE 执行时还没有“堆”,聚合函数在那里不合法,必须放 HAVING。
- 以为 dept_id 为 NULL 的行会被悄悄丢掉:它单独成一组,COUNT(*) 把它算作 1 行;想排除得显式写 WHERE dept_id IS NOT NULL。
30 秒速记
自测(3 题,先答再展开)
自测 1:为什么 HAVING COUNT(*) >= 2 不能改写成 WHERE COUNT(*) >= 2?
WHERE 在分组之前逐行判断,那时还没有“组”和计数结果;COUNT(*) 是分组后的汇总值,只能由 HAVING 判断。
自测 2:小李 dept_id 为 NULL,按 dept_id 分组后他会消失吗?
不会。GROUP BY 把 NULL 当成一个独立的分组值,他单独成一组;只有写成 COUNT(dept_id) 时这一组的计数才会是 0。
自测 3:例子里的 ROUND(AVG(salary),0) 为什么放在 SELECT 而不是 WHERE?
它是每堆算出来的汇总值,属于分组之后才存在的结果;放进 WHERE 时组还没形成,SQL 算不出来。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| P18 原视频页(BV1Kr4y1i7ru) | 平台视频页 · P18;采样静帧 t012/t20/t30/t40/t50/t60/t70/t80/tend | 标题“分组查询”;t20 帧的 Workbench 画面可见本集演示注释。 |
| MySQL 8.0 Reference:GROUP BY 处理与 ONLY_FULL_GROUP_BY | 官方文档 | 用于核对“非分组列 + 聚合函数”在默认 sql_mode 下的行为,未逐字引用。 |
| MySQL 8.0 Reference:SELECT 语句 | 官方文档 | 核对 WHERE/GROUP BY/HAVING 的子句位置。 |
按 P18 标题“分组查询”和 9 张采样静帧整理:t20 帧的 Workbench 画面里能看到本集演示注释——按性别分组统计人数、按性别统计平均年龄、先筛年龄<45 再按工作地址分组并要求数量≥3,说明本集讲的是 GROUP BY 与 HAVING 的组合。无字幕,讲师原话与逐条演示结果未核实;正文小表与数字是原创练习数据,不是课堂 emp 表。
讲义对照:讲义 2.6.5 分组查询 · p46–47(公开镜像;按主题对应,切点 notexact)
- 画面静帧 9 帧,采样点 0:12–10:05 / 全片 10:18(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。
视频 p=19 · 时长 6:36
P19 19. 基础-SQL-DQL-排序查询
原视频:在 B 站新标签打开(p=19) · 单独打开这一集 →
看视频,对照阅读:在新标签打开原视频(p=19)
排序看似简单,坑主要在默认方向、NULL 的位置和翻页稳定性。
画面采样只覆盖前半段:最远采样点 3:18 / 全片 6:36;后半段未取得画面,本页后半段相关表述仅依据标题与已采画面,属主题级核实。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
ORDER BY 决定结果按什么顺序排;不写它,数据库给出的行序没有任何保证。
按这 4 步做
- 在查询末尾写 ORDER BY 字段名,默认升序 ASC;要降序就在字段后补 DESC。
- 多列排序从左往右生效:第一列相同的行,才用第二列继续分先后。
- 排序可以按别名或表达式做,因为这一步发生在结果列确定之后,别名在这里能用。
- 需要“稳定的翻页顺序”时,末尾补一个唯一列(如 id)当兜底。
小例
SELECT id, name, salary
FROM employee
ORDER BY salary DESC, id ASC;
【原创演示】仍用那四行练习数据。salary 降序:小陈 12000、小周 10000、小林 8000;小李的 salary 是 NULL,在 MySQL 的降序排序里排在最后。第二列 id 只在薪资相同时才起作用,本例没有并列,所以结果顺序是 3、2、1、4。
易错点
- 以为 ORDER BY 会改变表里的存储顺序:它只影响这次查询返回的顺序,表里行的物理次序没有变。
- 把 ORDER BY salary, id DESC 当成整体降序:DESC 只跟着紧邻的那一列,第一列仍是升序。
- 排序用了可空列又不看默认位置:升序 NULL 在最前,降序 NULL 在最后,容易误判“最小值”。
30 秒速记
自测(2 题,先答再展开)
自测 1:ORDER BY salary DESC, id 里的 id 没写 ASC,为什么也按升序?
ASC 是默认排序方式,省略即升序;只有需要降序时才必须写 DESC。
自测 2:按薪资排序后为什么还要加 id?
薪资相同的行之间没有规定先后,数据库每次返回的顺序可能不同;只有加唯一列,顺序才确定,翻页才不会重复或漏行。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| P19 原视频页(BV1Kr4y1i7ru) | 平台视频页 · P19;采样静帧 t012/t020/t030/t040/t050 | 前半段:DQL 目录页 + “DQL-排序查询 1.语法”页;后半段无采样帧。 |
| MySQL 8.0 Reference:SELECT … ORDER BY | 官方文档 | 核对多列排序与 NULL 的排序位置,未逐字引用。 |
已核对前半段画面,后半演示未取得;排序规则的小例为原创补充。前半段指 t012 的 DQL 目录页与 t020 的“DQL-排序查询 1.语法”页(语法行为 SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2);采样帧止于 t050≈198s,全片 396s,故讲师后半段的演示 SQL 与查询结果未核实,正文也不引用任何课堂数值。无字幕。
讲义对照:讲义 2.6.6 排序查询 · p47–48(公开镜像;按主题对应,切点 notexact)
- 画面静帧 5 帧,采样点 0:12–3:18 / 全片 6:36(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。
视频 p=20 · 时长 5:34
P20 20. 基础-SQL-DQL-分页查询
原视频:在 B 站新标签打开(p=20) · 单独打开这一集 →
看视频,对照阅读:在新标签打开原视频(p=20)
分页查询只有一个 LIMIT,但要算对起始索引,并配一个确定的排序。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
LIMIT 让查询只返回一段连续的行,用来做“第几页”。
按这 4 步做
- 写 LIMIT 起始索引, 查询记录数;起始索引是“跳过多少行”,从 0 开始数。
- 换算页码:起始索引 =(页码 − 1)× 每页条数。第 2 页每页 10 条就是 LIMIT 10, 10。
- 第一页可以省略起始索引,直接 LIMIT 10;但这种省略只在第一页成立。
- 分页前先写 ORDER BY,否则每次“跳过”的可能不是同一批行。
小例
SELECT id, name
FROM employee
ORDER BY id
LIMIT 2, 2;
【原创演示】四行练习数据按 id 升序是 1、2、3、4。LIMIT 2,2 表示跳过前 2 行再取 2 行,所以返回 id 3(小陈)和 id 4(小李)。如果写成 LIMIT 2 则只取前 2 行,含义完全不同。
易错点
- 把起始索引当页码:LIMIT 2, 5 是“跳过 2 行取 5 行”,不是“第 2 页”。
- 不带 ORDER BY 就翻页:数据库没有义务保持行序,第 2 页可能出现第 1 页已经出现过的行。
- 以为 LIMIT 是通用写法:分页是各数据库的方言,其它库用 TOP、FETCH 或 ROWNUM。
30 秒速记
自测(2 题,先答再展开)
自测 1:每页 5 条,要第 3 页,LIMIT 后面写什么?
LIMIT 10, 5。(3−1)×5 = 10,跳前两页共 10 行,再取 5 行。
自测 2:既然 LIMIT 能截断,为什么还强调先 ORDER BY?
LIMIT 只按数据库返回的顺序截取,而没写 ORDER BY 时这个顺序不确定;同一句 SQL 两次执行可能截到不同的行。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| P20 原视频页(BV1Kr4y1i7ru) | 平台视频页 · P20;采样静帧 t012/t20/t30/t40/t50/t60/t70/t80/tend | t30/t40/t50/tend 为“DQL-分页查询 1.语法”页。 |
| MySQL 8.0 Reference:SELECT … LIMIT | 官方文档 | 核对 LIMIT 的两种参数含义,未逐字引用。 |
按 t30/t40/t50/tend 帧核对:画面为“DQL-分页查询 1.语法”,语法行是 SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;页内注明起始索引从 0 开始、等于(页码−1)×每页记录数、第一页可简写 limit 10、分页是数据库方言。无字幕,讲师口述与演示结果未核实,小例与数字为原创。
讲义对照:讲义 2.6.7 分页查询 · p48(公开镜像;按主题对应,切点 notexact)
- 画面静帧 9 帧,采样点 0:12–5:21 / 全片 5:34(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。
视频 p=21 · 时长 11:23
P21 21. 基础-SQL-DQL-案例练习
原视频:在 B 站新标签打开(p=21) · 单独打开这一集 →
看视频,对照阅读:在新标签打开原视频(p=21) · 先看跟播对照
这一集是唯一的一组「跟着敲」的练习:讲义 p48–49「2.6.8 案例」给了 5 道小题,从条件、定长匹配、分组到排序、分页各一道。本页按同型改写,用自己的 6 行小表,不照抄原题句子。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
这一集不讲新语法:5 道小题各练一个点——IN + 条件、LIKE 定长、COUNT 分组、双列排序、分页。
跟播:视频里 ↔ 本站
视频这一集是「案例」页:5 道小题连着写,题干就在画面上。
| 视频里 / 原课字段 | 本站对应 |
|---|---|
| emp 的 name / age / gender / entrydate | employee 的 name / age / gender / entrydate(本站 6 行) |
| 讲义按「20–23 岁女生」「三个字姓名」出题 | 本站同型改写:条件、定长、分组、排序、分页各一题 |
看完应能:5 道题能独立写出,并说清每道题只练了哪一个点
看视频时以讲义表为准,跟练时用本站表;结构相同、数字不同。
按这 4 步做
- 每题先只写「要哪些行」:条件放 WHERE,先别管排序和分页,跑一次看行数对不对。
- 看到「20、21、22、23 岁」这种离散取值用 IN;看到「姓名是三个字」用 LIKE '___'(下划线一个代表一个字符)。
- 要「每组一个数」才加 GROUP BY + 聚合函数;只是筛行不要分组。
- 最后补 ORDER BY(多列就写逗号)和 LIMIT(分页是「跳过几条, 取几条」)。每加一层都跑一次。
小例
-- 表:department(1 研发部, 2 市场部)
-- employee 6 行:小林/周小舟/陈小南/小李/王小明/赵小北(带 gender、entrydate,本页 5 道题要用)
-- 建表与插入语句见本页练习脚本 p21.sql(独立练习库 mysqlnotes_p21,跑一次就有这两张表)
-- 再加一道综合题:每部门人数与平均薪资,只要均值 > 8500 的组,取均值最高的一组
SELECT dept_id, COUNT(*) AS 人数, ROUND(AVG(salary), 0) AS 平均薪资
FROM employee
WHERE salary IS NOT NULL AND dept_id IS NOT NULL
GROUP BY dept_id
HAVING AVG(salary) > 8500
ORDER BY 平均薪资 DESC
LIMIT 1;
【原创演示】小李薪资 NULL 被 WHERE 去掉;赵小北部门是 NULL 也被去掉——不删的话 GROUP BY 会把 NULL 单独算成一组,那组只有他一人、均值 15000,会抢到第一名,答案就跑偏了。剩下部门 1(小林 8000、周小舟 10000,均值 9000)和部门 2(陈小南 12000、王小明 9000,均值 10500),两组都过 HAVING;按均值降序第一名是部门 2:人数 2、平均 10500。
5 道分题(每题只练一个点)
题 1 条件 + IN:找出「女生且年龄是 20/21/22/23 岁」的员工。
提示:两个条件同时成立用 AND;年龄是几个离散值,用 IN 比写四个 OR 短。
SELECT id, name, age FROM employee
WHERE gender = '女' AND age IN (20, 21, 22, 23)
ORDER BY id;
答案与解释(先自己写再看)
3 行:小林 20、周小舟 21、小李 22。
小李 22 岁也在集合里;王小明 35、赵小北 62 被年龄挡掉,陈小南是男生被 gender 挡掉。IN 后面的括号是值列表,不是子查询也可以。
题 2 LIKE 定长:姓名正好三个字。
提示:一个下划线 _ 匹配一个字符,三个下划线就是「正好三个字」;用 % 会变成「至少」或「包含」。
SELECT id, name FROM employee
WHERE name LIKE '___'
ORDER BY id;
答案与解释(先自己写再看)
4 行:周小舟、陈小南、王小明、赵小北。
小林、小李只有两个字,匹配不上三个下划线。改成 LIKE '__' 就只剩他们两个;改成 LIKE '%小%' 会把名字里带「小」的都找出来,含义完全不同。utf8mb4 下 LIKE 按字符匹配,一个汉字算一个 _。
题 3 COUNT + 分组:60 岁以下,男、女各多少人。
提示:先用 WHERE 把 60 岁以上的人筛掉,再按性别分组数行数。
SELECT gender, COUNT(*) AS 人数
FROM employee
WHERE age < 60
GROUP BY gender
ORDER BY gender;
答案与解释(先自己写再看)
2 行:女 3、男 2。
赵小北 62 岁被 WHERE 去掉,所以男生只剩陈小南、王小明 2 人;女生是小林、周小舟、小李 3 人。如果先分组再想筛年龄,条件就得写进 HAVING,那是另一条路(这里不需要)。
题 4 双列排序:按年龄升序,年龄相同再按入职时间降序。
提示:ORDER BY 后面用逗号分隔多个列,每一列各写自己的 ASC / DESC;第一列相同才看第二列。
SELECT name, age, entrydate FROM employee
ORDER BY age ASC, entrydate DESC;
答案与解释(先自己写再看)
6 行:小林 20 → 周小舟 21 → 小李 22 → 陈小南 23 → 王小明 35 → 赵小北 62。
这份数据里 6 个人的年龄都不同,所以第二列暂时没起作用;把某两人年龄改成一样,才会看到「同龄时入职晚的排前面」。ASC 可省略,DESC 不能省。
题 5 分页:按年龄升序,取第 2 页,每页 2 条。
提示:LIMIT 起始索引, 条数;起始索引 =(页码 − 1)× 每页条数,第 2 页就是 (2−1)×2 = 2。
SELECT name, age FROM employee
ORDER BY age ASC, id ASC
LIMIT 2, 2;
答案与解释(先自己写再看)
2 行:小李 22、陈小南 23。
跳过前 2 条(小林、周小舟),取接下来的 2 条。分页一定要配 ORDER BY,否则每次返回的顺序可能不同,「第 2 页」就没有意义。第一页可简写成 LIMIT 2。
易错点
- 把「三个字」写成 LIKE '%%%':% 是任意长度,三个 % 仍然是「任意」,要用三个下划线。
- ORDER BY age, entrydate DESC 误以为两列都降序:DESC 只作用在紧跟它的那一列。
- GROUP BY 会把 dept_id / gender 为 NULL 的行单独算一组,做统计时先想清楚要不要排除。
- LIMIT 2, 2 读成「第 2 条到第 2 条」:它是「跳过 2 条再取 2 条」。
30 秒速记
自测(2 题,先答再展开)
自测 1:第 2 题如果把 LIKE '___' 改成 LIKE '%小%',结果会变成什么?
会找出名字里含「小」的人:小林、小李、王小明、赵小北等,含义从「正好三个字」变成「包含某个字」。
自测 2:第 3 题为什么不用 HAVING?
因为筛的是「年龄 < 60」这类行级条件,在分组前用 WHERE 就够了;HAVING 是给分组后的聚合值用的。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| P21 原视频页(BV1Kr4y1i7ru) | 平台视频页 · P21;采样静帧 t012/t20/t30/t40/t50/t60/t70/t80/tend | t012 为“案例 / 按照需求完成如下DQL语句编写”标题页。 |
| MySQL 8.0 Reference:SELECT 语句 | 官方文档 | 核对子句书写顺序,未逐字引用。 |
题干见讲义 p48–49「2.6.8 案例」五题(画面 t≈60s 的题目页与讲义逐条对应),本页按同型改写、用自己的 6 行小表,不照抄原题句子与讲义 17 行 emp 数据。原声字幕未取得(匿名接口字幕轨为空),讲师逐句解法未核;示例数字均在 MySQL 8.0.46 实跑核对。
讲义对照:讲义 2.6.8 案例(5 题) · p48–49(公开镜像;按主题对应,切点 notexact)
- 画面静帧 9 帧,采样点 0:12–11:10 / 全片 11:23(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。
视频 p=22 · 时长 7:57
P22 22. 基础-SQL-DQL-执行顺序
原视频:在 B 站新标签打开(p=22) · 单独打开这一集 →
看视频,对照阅读:在新标签打开原视频(p=22)
理解执行顺序,才能解释“为什么别名在 WHERE 里不能用”。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
SQL 的书写顺序和执行顺序不是一回事:你从 SELECT 开始写,数据库却先找表、再筛行、再分组,最后才挑列。
按这 4 步做
- FROM:先确定数据来自哪张表,这是第一步。
- WHERE:对行做过滤,此时 SELECT 里的别名还不存在。
- GROUP BY 分堆、HAVING 筛堆;聚合值到这一步才算出来。
- SELECT 取出要显示的列,然后 ORDER BY 排序、LIMIT 截断。
小例
SELECT id, name, salary * 12 AS 年薪
FROM employee
WHERE salary IS NOT NULL
ORDER BY 年薪 DESC;
【原创演示】四行练习数据里小李没有薪资,WHERE 先把他去掉;SELECT 用 salary*12 算出年薪并起别名,ORDER BY 才能直接用“年薪”。结果三行:小陈 144000、小周 120000、小林 96000。若把条件换成 WHERE 年薪 > 90000 会直接报错(Unknown column),因为 WHERE 阶段别名还没生成。
易错点
- 以为 SELECT 写在最前面就先执行,于是在 WHERE 里用别名:会报未知列。
- 把 HAVING 当 WHERE 用:能在 WHERE 做的行过滤不要拖到 HAVING,语义不同还白算一遍分组。
- 把这套顺序当成引擎真实的指令流水线:它是解释“别名、聚合能写在哪”的逻辑顺序,优化器实际怎么取数另说。
30 秒速记
自测(2 题,先答再展开)
自测 1:ORDER BY 能用 SELECT 里的别名,WHERE 不能,为什么?
按逻辑顺序 WHERE 在 SELECT 之前执行,那时别名还没被定义;ORDER BY 排在 SELECT 之后,所以能引用。
自测 2:为什么说“执行顺序”不等于引擎的指令序列?
它是 SQL 语义的分层理解方式,用来判断每个子句能看到什么;真实执行由优化器决定访问路径和顺序,可能合并或跳过步骤。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| P22 原视频页(BV1Kr4y1i7ru) | 平台视频页 · P22;采样静帧 t012/t20/t30/t40/t50/t60/t70/t80/tend | t20 为“DQL-执行顺序”编写顺序/执行顺序对照页。 |
| MySQL 8.0 Reference:SELECT 语句 | 官方文档 | 核对子句语义与别名可用范围,未逐字引用。 |
按 t20 帧核对:幻灯片“DQL-执行顺序”左侧黄色框是编写顺序 SELECT/FROM/WHERE/GROUP BY/HAVING/ORDER BY/LIMIT,红圈数字可见 FROM=1、WHERE=2、GROUP BY=3、SELECT=4;该帧是动画中间态,HAVING/ORDER BY/LIMIT 的编号未出现,完整顺序按 SQL 标准语义补全,并已在正文说明这是逻辑理解顺序而非引擎指令序列。无字幕。
讲义对照:讲义 2.6.9 执行顺序 · p49–50(公开镜像;按主题对应,切点 notexact)
- 画面静帧 9 帧,采样点 0:12–7:44 / 全片 7:57(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。
视频 p=23 · 时长 3:11
P23 23. 基础-SQL-DQL小结
原视频:在 B 站新标签打开(p=23) · 单独打开这一集 →
看视频,对照阅读:在新标签打开原视频(p=23)
DQL 收尾:一页纸记住六个子句和两个过滤位置。
这一集在讲什么
这一集把 DQL 的六个子句收成一张图:谁筛行、谁筛组、别名能写在哪。
要点(3 条)
- 六个子句:
SELECT 字段 FROM 表 WHERE 行条件 GROUP BY 分组列 HAVING 组条件 ORDER BY 排序列 LIMIT 分页。 - 两个过滤位置:WHERE 在分组前筛行;HAVING 在分组后筛组,可以写聚合值(
HAVING COUNT(*) >= 2)。 - 别名只向后生效:ORDER BY 能用
SELECT里起的别名,WHERE 不能用。
30 秒回忆
想再练一下(1 题,选做)
自测 1:哪两个子句最容易混?依据什么区分?
WHERE 和 HAVING。依据是作用对象与时机:WHERE 对行、在分组前;HAVING 对组、在分组后,可以包含聚合值。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| P23 原视频页(BV1Kr4y1i7ru) | 平台视频页 · P23;采样静帧 t012/t20/t30/t40/t50/t60/t70/t80/tend | t60 为 DQL 小结页(六子句 + 别名 + 过滤位置)。 |
| MySQL 8.0 Reference:SELECT 语句 | 官方文档 | 核对子句完整清单,未逐字引用。 |
讲义无“小结”正文;本页参照前节 2.6 DQL(p38–50)整理。画面 t60 帧为 DQL 小结页,列出 SELECT/FROM/WHERE/GROUP BY/HAVING 与运算符清单;原声字幕未取得,讲师逐句讲解未核。
讲义对照:参照前节整理,无独立讲义正文;参照前节 2.6 DQL(p38–50)
- 画面静帧 9 帧,采样点 0:12–2:58 / 全片 3:11(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。