MySQL 视频课 · 50 集 / 多表查询:多表关系、内/外/自连接、联合查询 / P42

第 42 集 / 共 50 · 多表查询:多表关系、内/外/自连接、联合查询 · 视频 p=42 · 时长 5:48

P42 42. 基础-多表查询-联合查询union

讲义 5.5.2 联合查询 p79–80

按主题对应,非逐句切分

来源与核对说明

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

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

讲义索引:p79–80 · 5.5.2 联合查询 · 切点 notexact

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

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

看视频,对照阅读:在新标签打开原视频(p=42) · 先看跟播对照

这一页只记一句话:连接横向拼列,UNION 纵向接行。剩下的都是这句的推论。

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

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

一句话理解

连接横向拼列,UNION 纵向接行。UNION 去重,UNION ALL 不去重、更快。

跟播:视频里 ↔ 本站

视频里 / 原课字段本站对应
讲义:工资 <5000 与 >20000 两段 UNION本站:同一写法换成 4 行小表的两段条件
UNION 去重 / UNION ALL 保留重复同左(语法与行为一致)

看视频时以讲义表为准,跟练时用本站表;结构相同、数字不同。

按这 4 步做

  1. 先保证两条 SELECT 列数一样、对应列类型能相容。列数不同直接报错(ERROR 1222),类型不相容会隐式转换或丢精度。 比如 INT 和 VARCHAR 合并,MySQL 会先转成同一类型再比,结果可能出乎意料。
  2. 要“合并后不重复”用 UNION:它把完全相同的整行去掉,代价是多一次去重。
  3. 确定不会有重复、或就是要保留重复(比如两批统计各自的行)用 UNION ALL,省掉去重开销。
  4. ORDER BY 写在最后一条 SELECT 之后,作用于整个合并结果;只给第一条写排序没有意义。

小例

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

SQL 示例
-- 表:department(1 研发部, 2 测试部, 3 运营部)
-- employee:小林22/研发8000/上级2,小周25/研发10000/无上级,小陈30/测试12000/上级2,小李21/无部门/NULL/上级2
-- 建表与插入语句见本页练习脚本 p42.sql(独立练习库 mysqlnotes_p42,跑一次就有这两张表)

-- 去重:小周只留一次
SELECT name FROM employee WHERE age >= 25
UNION
SELECT name FROM employee WHERE dept_id = 1;

-- 保留重复:小周出现两次
SELECT name FROM employee WHERE age >= 25
UNION ALL
SELECT name FROM employee WHERE dept_id = 1;

第一段左边是小周、小陈,右边是小林、小周;UNION 去掉重复的小周,3 行。第二段同样的数据用 UNION ALL,4 行,小周出现两次。判断重复的依据是“整行完全相同”,不是只看某一列。 列名取第一条 SELECT 的别名,第二条写什么别名都不影响输出表头。

易错点

30 秒速记

UNION 纵接行、去重;UNION ALL 保留重复;列数列型要对齐;ORDER BY 放最后。

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

自测 1:UNION 和 UNION ALL 的区别?

UNION 对合并结果去重,UNION ALL 原样保留所有行、开销更小。

自测 2:两条 SELECT 列数不同会怎样?

报 ERROR 1222,UNION 要求列数一致、类型相容。

自测 3:两条 SELECT 的列顺序不同能 UNION 吗?

能执行,但会按位置硬拼,A 的姓名接到 B 的部门上,语义就错了;列顺序必须人工对齐。

材料与来源

展开材料出处、讲义页码与证据等级
材料类型 / 位置支持了什么
BV1Kr4y1i7ru P42(平台标题)平台视频页 · P42静帧 t=243s 显示 UNION ALL 与 UNION 两段示例;t=335s 为 union / union all 规则页
MySQL 8.0 Reference Manual — UNION官方文档仅用于核对 UNION 去重与列数要求,不是课程材料

本集无逐字稿(匿名 player/v2 返回 subtitles=[]、need_login_subtitle=true),并以讲义公开镜像讲义 5.5.2 联合查询(p79–80)核对章节与主题;画面静帧只用于确认场景,不是内容边界。示例表与数据为本笔记自建,不是课程原表;不含原始帧或字幕。

讲义对照:讲义 5.5.2 联合查询 · p79–80(公开镜像;按主题对应,切点 notexact)

  • 画面静帧 9 帧,采样点 0:12–5:35 / 全片 5:48(只用于确认画面主题,不作内容边界)
  • 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号

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

下载本集 Markdown