在 SQL 中,JOIN
用于根据相关列将多个表的数据组合在一起。主要的 JOIN
类型包括 INNER JOIN
(简称 JOIN
)、LEFT JOIN
和 RIGHT JOIN
。让我们分别解释它们的区别:
1. JOIN
/ INNER JOIN
- 只返回两个表中 匹配 的行,匹配条件通常是基于
ON
关键字指定的列。 - 如果某一行在任意一个表中没有匹配项,则该行不会出现在结果集中。
示例:
SELECT A.id, A.name, B.order_id
FROM Customers A
JOIN Orders B ON A.id = B.customer_id;
结果: 只返回 Customers
表和 Orders
表中 都匹配 的 customer_id
记录。
2. LEFT JOIN
/ LEFT OUTER JOIN
- 返回 左表(第一个表) 的所有行,即使在右表中找不到匹配项。
- 如果右表中没有匹配项,则结果集中该部分的值为
NULL
。
示例:
SELECT A.id, A.name, B.order_id
FROM Customers A
LEFT JOIN Orders B ON A.id = B.customer_id;
结果: 返回 Customers
表中的所有客户,即使某个客户没有下过订单,其 order_id
也会显示 NULL
。
3. RIGHT JOIN
/ RIGHT OUTER JOIN
- 返回 右表(第二个表) 的所有行,即使在左表中找不到匹配项。
- 如果左表中没有匹配项,则结果集中该部分的值为
NULL
。
示例:
SELECT A.id, A.name, B.order_id
FROM Customers A
RIGHT JOIN Orders B ON A.id = B.customer_id;
结果: 返回 Orders
表中的所有订单,即使某个订单没有匹配的客户,其 name
也会显示 NULL
。
4. 总结对比
JOIN 类型 | 结果包含的行 |
---|---|
INNER JOIN | 只返回 两张表都有匹配项 的行 |
LEFT JOIN | 返回 左表所有行,即使右表没有匹配项 |
RIGHT JOIN | 返回 右表所有行,即使左表没有匹配项 |
5. 视觉示意图
INNER JOIN
A | B
----|----
1 | 1
2 | 2
LEFT JOIN
A | B
----|----
1 | 1
2 | 2
3 | NULL
RIGHT JOIN
A | B
----|----
1 | 1
2 | 2
NULL | 4
Leave a Reply