SQL 中 join, left join, right join 的区别

在 SQL 中,JOIN 用于根据相关列将多个表的数据组合在一起。主要的 JOIN 类型包括 INNER JOIN(简称 JOIN)、LEFT JOINRIGHT 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  

Comments

One response to “SQL 中 join, left join, right join 的区别”

  1. Amandanirwaya

    Let’s see how far we can take this tonight – https://rb.gy/es66fc?pync

Leave a Reply

Your email address will not be published. Required fields are marked *