MySQL 视频课 · 50 集 / 多表查询:多表关系、内/外/自连接、联合查询 / P39
第 39 集 / 共 50 · 多表查询:多表关系、内/外/自连接、联合查询 · 视频 p=39 · 时长 8:15
P39 39. 基础-多表查询-内连接
看视频,对照阅读:在新标签打开原视频(p=39) · 先看跟播对照
内连接是多表查询的主力:只保留两张表能对上的行。写法有两种,结果完全一样,选一种顺手的坚持下去。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
内连接只保留两张表能对上的行:员工有部门才出现,部门有员工才出现。
跟播:视频里 ↔ 本站
视频演示内连接的两种写法:from emp, dept where … 与 inner join … on …。
| 视频里 / 原课字段 | 本站对应 |
|---|---|
| emp.name / emp.age / dept.name | employee.name / employee.age / department.name |
| emp.dept_id = dept.id | employee.dept_id = department.id |
看完应能:两种写法都能写出来,并知道它们结果相同
看视频时以讲义表为准,跟练时用本站表;结构相同、数字不同。
按这 4 步做
- 先确定连接条件:employee.dept_id = department.id。这是“员工属于哪个部门”的唯一依据,条件写错会得到看似正常其实错位的结果。
- 隐式写法把两张表用逗号并列,条件放 WHERE。老教材和简写常用,表一多就容易漏条件。
- 显式写法用 INNER JOIN ... ON,连接条件和过滤条件分家。推荐这种:ON 只写“怎么对上”,WHERE 只写“要哪些行”,读起来不容易混。
- 写完对一下行数。4 名员工里只有 3 人有部门,内连接就该是 3 行;多出来通常是漏了条件,少了则要查 dept_id 是否为空。另外,ON 里别写 e.age < 30 这类过滤——内连接结果一样,换成外连接就会保留不该保留的行。
小例
-- 表:department(1 研发部, 2 测试部, 3 运营部)
-- employee:小林22/研发8000/上级2,小周25/研发10000/无上级,小陈30/测试12000/上级2,小李21/无部门/NULL/上级2
-- 建表与插入语句见本页练习脚本 p39.sql(独立练习库 mysqlnotes_p39,跑一次就有这两张表)
SELECT e.name AS 员工, e.age AS 年龄, d.name AS 部门
FROM employee e
INNER JOIN department d ON e.dept_id = d.id
ORDER BY e.id;
返回 3 行:小林 22 研发部、小周 25 研发部、小陈 30 测试部。ON 负责把 dept_id 和 id 对上;ORDER BY e.id 只是让结果顺序稳定。把 INNER JOIN 换成“employee e, department d WHERE e.dept_id = d.id”,输出一模一样。 去掉 ORDER BY 再跑,行序可能变,但行集合不变:排序只影响展示。
易错点
- ON 写成 e.dept_id = d.name,类型和含义都错,却不一定报错,只会得到空结果或错配。
- 把过滤条件写进 ON 而不是 WHERE,在内连接里结果相同,但换成外连接含义就变了,别养成习惯。
- SELECT * 会带出两张表的全部列,同名列看起来重复;初学先显式写字段。
- 给表起了别名后,就不能再用原表名指字段:
SELECT e.name … FROM employee e里写employee.name会报 Unknown column。
30 秒速记
自测(3 题,先答再展开)
自测 1:内连接和外连接最根本的区别?
内连接丢弃匹配不上的行;外连接保留某一侧全部行,另一侧用 NULL 补。
自测 2:两种内连接写法结果会不同吗?
不会,结果相同,只是条件位置和可读性不同。
自测 3:内连接会不会返回重复行?
会;一对多时一条左表记录匹配多行就会重复,需要按业务去重或聚合。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| BV1Kr4y1i7ru P39(平台标题) | 平台视频页 · P39 | 静帧 t=98s 为“连接查询-内连接”标题页;具体 SQL 演示画面不清晰,示例为本笔记自写 |
| MySQL 8.0 Reference Manual — JOIN Clause | 官方文档 | 仅用于核对连接语义与错误码,不是课程材料 |
本集无逐字稿(匿名 player/v2 返回 subtitles=[]、need_login_subtitle=true),并以讲义公开镜像讲义 5.3 内连接(p75–77)核对章节与主题;画面静帧只用于确认场景,不是内容边界。示例表与数据为本笔记自建,不是课程原表;不含原始帧或字幕。
讲义对照:讲义 5.3 内连接 · p75–77(公开镜像;按主题对应,切点 notexact)
- 画面静帧 9 帧,采样点 0:12–8:02 / 全片 8:15(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。