SQL JOIN 详解
INNER/LEFT/RIGHT/FULL/CROSS JOIN 多表连接 · 难度:入门 · +20XP
SQL JOIN 深度解析 —— 七种连接方式
JOIN是SQL最强大的特性之一,但也是最容易被误解的。理解INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN、CROSS JOIN以及它们的区别,是写出正确查询的基础。
七种JOIN
| 类型 | 返回 |
|---|---|
| INNER JOIN | 两表都匹配的行 |
| LEFT JOIN | 左表全部行 + 右表匹配的行(不匹配为NULL) |
| RIGHT JOIN | 右表全部行 + 左表匹配的行 |
| FULL JOIN | 两表所有行(MySQL不直接支持,用UNION模拟) |
| CROSS JOIN | 笛卡尔积(每行×每行) |
| SELF JOIN | 表自己连接自己(如员工-经理关系) |
| NATURAL JOIN | 自动按同名列连接(不推荐,隐式逻辑) |
关键示例
-- LEFT JOIN:即使用户没有订单也显示
SELECT u.name, o.order_date
FROM users u LEFT JOIN orders o ON u.id = o.user_id;
-- 找出没有订单的用户(LEFT JOIN + IS NULL)
SELECT u.name FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.id IS NULL;
动手练习
- 基础练习:创建用户表和订单表,用LEFT JOIN列出所有用户及订单数。
- 进阶应用:用自连接(SELF JOIN)查询每个员工及其直属上级。
- 项目实战:分析项目中使用JOIN的查询,确认JOIN类型选择正确。