多个表关联就像把不同的Excel表格通过共同字段连接起来,让数据能够"对话"。
一. 表关联的基本原理
想象你有三张表:
-
学生表(学号、姓名)
-
课程表(课程ID、课程名)
-
成绩表(学号、课程ID、分数)
它们通过共同字段连接:
-
成绩表的"学号" ↔ 学生表的"学号"
-
成绩表的"课程ID" ↔ 课程表的"课程ID"
二. 四种常用关联方式
(1) 内连接(INNER JOIN)→ "严格匹配"
SELECT 学生.姓名, 课程.课程名, 成绩.分数
FROM 成绩
INNER JOIN 学生 ON 成绩.学号 = 学生.学号
INNER JOIN 课程 ON 成绩.课程ID = 课程.课程ID;
只显示有成绩记录的学生和课程(三表都有的数据)
(2) 左连接(LEFT JOIN)→ "保大优先"
SELECT 学生.姓名, 课程.课程名, 成绩.分数
FROM 学生
LEFT JOIN 成绩 ON 学生.学号 = 成绩.学号
LEFT JOIN 课程 ON 成绩.课程ID = 课程.课程ID;
显示所有学生,即使他没成绩(左边表的数据全保留)
(3) 右连接(RIGHT JOIN)→ "保小优先"
SELECT 学生.姓名, 课程.课程名, 成绩.分数
FROM 成绩
RIGHT JOIN 学生 ON 成绩.学号 = 学生.学号
RIGHT JOIN 课程 ON 成绩.课程ID = 课程.课程ID;
显示所有课程,即使没人选修(右边表的数据全保留)
(4) 全连接(FULL JOIN)→ "我全都要"
SELECT 学生.姓名, 课程.课程名, 成绩.分数
FROM 学生
FULL JOIN 成绩 ON 学生.学号 = 成绩.学号
FULL JOIN 课程 ON 成绩.课程ID = 课程.课程ID;
显示所有学生和所有课程(不管有没有对应关系)
三. 左右连接的区别
SELECT *
FROM 表A
LEFT JOIN 表B ON 表A.字段 = 表B.字段
-
左表(LEFT TABLE):
FROM
后面的表(这里是表A
) -
右表(RIGHT TABLE):
JOIN
后面的表(这里是表B
)
(1) 左右连接的核心区别
连接类型 | 保留谁的数据? | 相当于 |
---|---|---|
LEFT JOIN | 左表全部保留,右表不匹配的补NULL | 保护FROM 后面的表 |
RIGHT JOIN | 右表全部保留,左表不匹配的补NULL | 保护JOIN 后面的表 |
(2) 重要技巧
-
LEFT JOIN更常用(因为SQL是从FROM后的主表开始处理的)
-
RIGHT JOIN可以改写为LEFT JOIN(只需调换表位置)
表A RIGHT JOIN 表B ↔ 表B LEFT JOIN 表A
-
多表连接时:前一个JOIN的结果会成为下一个JOIN的"左表"
-
只要记住:FROM后的表是左,JOIN后的表是右,你就永远不会搞混了!
四.关联技巧口诀
-
明确主表:FROM后第一个表是"主表"
-
确定关系:ON后面写关联条件(像桥梁)
-
选择类型:
-
要精确匹配 → INNER JOIN
-
要保留主表全部 → LEFT JOIN
-
要保留关联表全部 → RIGHT JOIN
-
两边都要保留 → FULL JOIN
-
-
过滤数据:最后用WHERE加条件
这样是不是很清楚啦?实际写SQL时,先从简单的两个表关联练起,熟练后再增加多表关联哦!