MySQL 中 INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别是什么?

Sherwin.Wei Lv7

MySQL 中 INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别是什么?

回答重点

INNER JOIN

  • 只返回两个表中匹配的行。如果没有匹配,则该行不会出现在结果集中。
  • 适用于只关心交集数据的场景。

LEFT JOIN(或 LEFT OUTER JOIN):

  • 返回左表中的所有行,即使右表中没有匹配的行。如果右表没有匹配,则结果中的右侧列会显示为NULL。
  • 适用于需要保留左表所有数据的场景。

RIGHT JOIN(或 RIGHT OUTER JOIN):

  • 返回右表中的所有行,即使左表中没有匹配的行。如果左表没有匹配,则结果中的左侧列会显示为NULL。
  • 适用于需要保留右表所有数据的场景。

扩展知识

代码示例

INNER JOIN

1
2
3
SELECT *
FROM table1
INNER JOIN table2 ON table1.id = table2.id;

LEFT JOIN
1
2
3
SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.id;

RIGHT JOIN
1
2
3
SELECT *
FROM table1
RIGHT JOIN table2 ON table1.id = table2.id;

应用场景

  • INNER JOIN 适合用在只需要共同数据的结果集中。
  • LEFT JOIN 在需要保留主表所有数据的报表中非常有用,比如在客户(左表)和订单表(右表)中查找所有客户及其订单信息,即使有些客户没有订单。
  • RIGHT JOIN 则在需要保留右表所有数据的情况下使用,例如在处理员工(左表)和部门表(右表)时,确保显示所有部门,即使某些部门没有员工。

NULL 值处理

  • 使用 LEFT JOIN 或 RIGHT JOIN 时,需注意处理结果集中可能出现的 NULL 值,以确保后续的数据处理逻辑正确。

图示所有 JOIN

image.png
Comments