MySQL 视频课 · 50 集 / DQL 进阶:分组、排序、分页、综合案例、执行顺序 / P22

第 22 集 / 共 50 · DQL 进阶:分组、排序、分页、综合案例、执行顺序 · 视频 p=22 · 时长 7:57

P22 22. 基础-SQL-DQL-执行顺序

讲义 2.6.9 执行顺序 p49–50

按主题对应,非逐句切分

来源与核对说明

以同版讲义的公开镜像核对章节与页码(镜像非官方出品);非逐字稿,示例为原创补充。

本页是学习笔记,不等同于视频逐字稿。原声字幕未取得(匿名接口字幕轨为空且需登录,未使用任何账号),也没有逐句讲解记录;讲义只按节与页码对应,切点未逐句确证。

讲义索引:p49–50 · 2.6.9 执行顺序 · 切点 notexact

讲义是第三方公开镜像(95 页 PDF),不是官方原件;这里只用它核对章节顺序与页码,不转载正文。

完整来源说明与变更记录 →

看视频,对照阅读:在新标签打开原视频(p=22)

理解执行顺序,才能解释“为什么别名在 WHERE 里不能用”。

复习模式:快速跳知识点(详解在下方各节)

复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。

一句话理解

SQL 的书写顺序和执行顺序不是一回事:你从 SELECT 开始写,数据库却先找表、再筛行、再分组,最后才挑列。

按这 4 步做

  1. FROM:先确定数据来自哪张表,这是第一步。
  2. WHERE:对行做过滤,此时 SELECT 里的别名还不存在。
  3. GROUP BY 分堆、HAVING 筛堆;聚合值到这一步才算出来。
  4. SELECT 取出要显示的列,然后 ORDER BY 排序、LIMIT 截断。

小例

先准备本集练习数据:p22.sql · 练习库说明

SQL 示例
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 阶段别名还没生成。

易错点

30 秒速记

书写:SELECT→FROM→WHERE→GROUP BY→HAVING→ORDER BY→LIMIT;理解:FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY→LIMIT。

自测(2 题,先答再展开)

自测 1:ORDER BY 能用 SELECT 里的别名,WHERE 不能,为什么?

按逻辑顺序 WHERE 在 SELECT 之前执行,那时别名还没被定义;ORDER BY 排在 SELECT 之后,所以能引用。

自测 2:为什么说“执行顺序”不等于引擎的指令序列?

它是 SQL 语义的分层理解方式,用来判断每个子句能看到什么;真实执行由优化器决定访问路径和顺序,可能合并或跳过步骤。

材料与来源

展开材料出处、讲义页码与证据等级
材料类型 / 位置支持了什么
P22 原视频页(BV1Kr4y1i7ru)平台视频页 · P22;采样静帧 t012/t20/t30/t40/t50/t60/t70/t80/tendt20 为“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(只用于确认画面主题,不作内容边界)
  • 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号

等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。

下载本集 Markdown