MySQL 视频课 · 50 集 / DQL 进阶:分组、排序、分页、综合案例、执行顺序 / P19
第 19 集 / 共 50 · DQL 进阶:分组、排序、分页、综合案例、执行顺序 · 视频 p=19 · 时长 6:36
P19 19. 基础-SQL-DQL-排序查询
看视频,对照阅读:在新标签打开原视频(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(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。