📄 一句话概括
INNER JOIN(内连接)= 3-20 的 JOIN 正式名——两边都【对上号】的行才留,差一个字号的都不收。
📝 本节和前面几节的关系
3-20 埋的伏笔【钱七为什么出局】在本节正式命名:那叫内连接。写 JOIN 还是 INNER JOIN 是一回事(INNER 可省略);本节把它的脾气、坑和适用场景说透,为 3-22 的外连接立好参照。
一、INNER JOIN 的定义与写法
-- 准备块:students(3-6)+ classes(3-20)
SELECT students.name, students.class, classes.teacher
FROM students
INNER JOIN classes ON students.class = classes.id;
- INNER 可省略:
JOIN=INNER JOIN,一模一样 - 结果=两边 ON 条件都成立的行组合——像相机对焦:只有焦点上的才清晰,其余全虚掉
二、内连接的画面感:配对桌
想象两张名单分坐长桌两侧:
- 左桌 students 5 人,右桌 classes 2 行
- 每个左桌的人举着 class 号找右桌同号配对:
- 张三(1)↔1 班 ✓、李四(1)↔1 班 ✓、王五(2)↔2 班 ✓、赵六(2)↔2 班 ✓
- 钱七(3):右桌没有 3 号 → 配对失败 → 整行出局
内连接的铁律:配对成功才入座,落单的离场——两边都不迁就。
三、内连接的对称性
内连接有个好脾气:A JOIN B 和 B JOIN A 结果内容相同(列的摆放顺序不同而已)——谁左谁右不改变【只留配对成功】的规矩。
外连接(3-22)恰好相反:谁在左谁在右天差地别——这是两族连接最大的性格差异。
四、动手 Demo:内连接三连
-- ① 基础配对:学生×班主任(4 行,钱七出局)
SELECT students.name, classes.teacher
FROM students
INNER JOIN classes ON students.class = classes.id;
-- ② 配对+聚合:每个老师带几个人
SELECT classes.teacher, COUNT(*) AS 带生数
FROM students
INNER JOIN classes ON students.class = classes.id
GROUP BY classes.teacher;
-- ③ 三表拼:给 students 造一张课程表再拼(体会多表链)
CREATE TABLE courses (
class INTEGER,
course TEXT
);
INSERT INTO courses VALUES (1, '语文');
INSERT INTO courses VALUES (1, '数学');
INSERT INTO courses VALUES (2, '英语');
SELECT students.name, classes.teacher, courses.course
FROM students
INNER JOIN classes ON students.class = classes.id
INNER JOIN courses ON courses.class = students.class;
③的输出:张三/李四各对应【语文、数学】两行,王五/赵六各对应【英语】一行——一个学生的信息拆成多行出现(1 对多),行数变多不是错,是配对的天然结果。
看到什么算成功:①4 行、②两行、③能解释【为什么张三出现了两行】。
五、30 秒实验
给 classes 补上 3 班:INSERT INTO classes VALUES (3, '钱老师'); 再跑①——钱七回来了(5 行)。内连接不丢人,丢的是【对不上号】;数据补齐,配对自然成功。这正是排查【JOIN 少数据】的第一动作:检查另一边到底有没有对得上号的那行。
六、常见误区
- "JOIN 和 INNER JOIN 是两种连接" —— 同一个:
JOIN是省略 INNER 的简写。 - "配对失败的行会以 NULL 出现" —— 那是外连接(3-22);内连接里落单的行直接消失,不是补 NULL。
- "内连接丢行是 bug" —— 是设计:只要【确定两边都该有】的数据(订单对商品、订单对顾客),内连接恰好滤掉脏数据;【想保全一方】才轮到外连接。
自测三问(点开对答案)
1. `JOIN` 和 `INNER JOIN` 什么关系? **同一个,INNER 可省略**。 2. 内连接怎么处理配对失败的行? **直接出局**——不补 NULL(那是外连接)。 3. A INNER JOIN B 和 B INNER JOIN A 结果一样吗? **内容一样**(列顺序不同)——内连接对称;外连接不对称。- ☐ 下一节(3-22 外连接、LEFT JOIN、RIGHT JOIN-获取标准记录及与之匹配的记录)
相关笔记
- JOIN-合并多个表获取数据 —— 上一节:JOIN 总纲与配对桌的画面
- 🗄️ 数据库基础 · 索引 —— 全课路线图