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

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

P38 38. 基础-多表查询-概述

讲义 5.2 多表查询概述(含 5.2.1 数据准备) p72–75

按主题对应,非逐句切分

来源与核对说明

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

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

讲义索引:p72–75 · 5.2 多表查询概述(含 5.2.1 数据准备) · 切点 notexact

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

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

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

两张表放一起查,最容易出的错不是语法,而是忘写连接条件。本页先把“为什么会多出一堆行”讲清楚。

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

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

一句话理解

多表查询就是把两张表放在一起查。不写连接条件,MySQL 会把每行都和对方每行配一次,得到笛卡尔积——大部分行没有意义。

跟播:视频里 ↔ 本站

视频里 / 原课字段本站对应
emp 17 行、dept 6 行employee 4 行、department 3 行(本站原创小表)
emp.dept_id / dept.idemployee.dept_id / department.id(关系相同)

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

按这 4 步做

  1. 先看两张表各自的规模。4 名员工 × 3 个部门 = 12 行,这就是不加条件的全部组合;行数相乘是判断“有没有漏写条件”的最快信号。
  2. 再用连接条件筛掉乱配的行。员工表的 dept_id 和部门表的 id 相等,才说明这名员工属于这个部门,12 行立刻剩 3 行。
  3. 连接条件写在 WHERE(隐式)或 ON(显式)都行,效果一样;差别在可读性,以及外连接时条件必须放 ON。
  4. 最后记住分类:内连接、外连接、自连接、子查询。前三个是“怎么把表拼起来”,子查询是“先算一个结果再用”。

小例

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

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

-- 故意不写连接条件:4 × 3 = 12 行
SELECT e.name AS 员工, d.name AS 部门
FROM employee e, department d;

-- 补上连接条件:只剩 3 行
SELECT e.name AS 员工, d.name AS 部门
FROM employee e, department d
WHERE e.dept_id = d.id;

第一条返回 12 行,小林会分别配上研发部、测试部、运营部,明显是错配。第二条只剩 3 行:小林-研发部、小周-研发部、小陈-测试部。小李的 dept_id 是 NULL,NULL = 任何值都不成立,所以他不出现——这是内连接的正常行为,不是丢数据。

易错点

30 秒速记

多表=先组合再筛选;不写条件=笛卡尔积;连接条件把 4×3 变 3;内连接丢掉不匹配行。

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

自测 1:4 行员工、3 行部门,不写连接条件返回几行?

12 行,行数相乘;写了 dept_id = id 后是 3 行。

自测 2:小李为什么不出现在内连接结果里?

他的 dept_id 是 NULL,与任何 id 比较都不为真,匹配不上;要保留他用 LEFT JOIN。

材料与来源

展开材料出处、讲义页码与证据等级
材料类型 / 位置支持了什么
BV1Kr4y1i7ru P38(平台标题)平台视频页 · P38静帧 t=193s 为“多表查询概述/笛卡尔积”幻灯片;t=471s 列出连接查询分类
MySQL 8.0 Reference Manual — JOIN Clause官方文档仅用于核对连接语义与错误码,不是课程材料

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

讲义对照:讲义 5.2 多表查询概述(含 5.2.1 数据准备) · p72–75(公开镜像;按主题对应,切点 notexact)

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

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

下载本集 Markdown