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

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

P41 41. 基础-多表查询-自连接

讲义 5.5.1 自连接查询 p78–79

按主题对应,非逐句切分

来源与核对说明

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

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

讲义索引:p78–79 · 5.5.1 自连接查询 · 切点 notexact

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

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

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

自连接不涉及第二张表,难点全在“同一张表怎么分身份”。两个别名一给,事情就简单了。

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

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

一句话理解

自连接就是一张表当两张用:给同一张表起两个别名,一个当员工、一个当上级,再按 manager_id = id 连起来。

跟播:视频里 ↔ 本站

视频里 / 原课字段本站对应
emp.managerid → emp.idemployee.manager_id → employee.id
讲义里张无忌的上级是金庸本站小林、小陈的上级是 2 号小周

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

按这 4 步做

  1. 先给同一张表两个身份。e 代表“我”,m 代表“我的上级”;不给别名,MySQL 分不清你要哪一行。 别名起得有含义(e 员工、m 上级),比 a、b 好排查。
  2. 连接条件是 e.manager_id = m.id,即“我的上级编号 = 对方的员工编号”。这跟普通两表连接没区别,只是两张表恰好同名。
  3. 顶层老板没有上级,manager_id 是 NULL。要把他留在结果里就用 LEFT JOIN;用内连接他会消失,看起来像“少了个人”。
  4. 字段一律带别名前缀。同名列(两张表都叫 name、id)不带前缀会报 ambiguous,带上就清楚了。

小例

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

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

SELECT e.name AS 员工, m.name AS 上级
FROM employee e
LEFT JOIN employee m ON e.manager_id = m.id
ORDER BY e.id;

4 行:小林-小周、小周-NULL、小陈-小周、小李-小周。小周是老板,manager_id 为空,所以上级列是 NULL。把 LEFT 改成 INNER,只剩 3 行,小周整行不见——这是自连接最容易踩的坑。 把 ON 改成 e.id = m.manager_id,方向就反过来了,查的是“我的下属”,别名含义要跟着改。

易错点

30 秒速记

自连接=同表两别名;e.manager_id=m.id;老板上级是 NULL;要全量用 LEFT JOIN。

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

自测 1:自连接必须做什么?

给同一张表起两个不同别名,并用别名区分字段。

自测 2:查“所有员工+上级”,内连接会少谁?

少没有上级的人(如小周),因为 manager_id 为 NULL 匹配不上。

自测 3:自连接的两个别名可以互换吗?

可以,但连接条件和字段含义要一起换;互换后查的是“我的下属”而不是“我的上级”。

材料与来源

展开材料出处、讲义页码与证据等级
材料类型 / 位置支持了什么
BV1Kr4y1i7ru P41(平台标题)平台视频页 · P41静帧 t=254s 显示 SELECT * FROM employee a LEFT JOIN employee b ON a.managerid=b.id 的自连接写法
MySQL 8.0 Reference Manual — JOIN Clause官方文档仅用于核对连接语义与错误码,不是课程材料

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

讲义对照:讲义 5.5.1 自连接查询 · p78–79(公开镜像;按主题对应,切点 notexact)

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

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

下载本集 Markdown