Skip to content

理解 SQL 中的 INNER JOIN 和 OUTER JOIN

Posted on:2024年6月15日 at 23:25

在 SQL 中,表之间的联接操作(Join)是非常重要的。本文将介绍 INNER JOINOUTER JOIN 的区别,并进一步解释 LEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOIN 的具体用法。

INNER JOINOUTER JOIN 的区别

INNER JOIN

INNER JOIN 返回两个表中满足联接条件的交集部分。假设我们有两个表 A 和 B:

A    B
-    -
1    3
2    4
3    5
4    6

INNER JOIN 会返回表 A 和 B 中共有的行:

SELECT * FROM A INNER JOIN B ON A.a = B.b;

-- 结果
a | b
--+--
3 | 3
4 | 4

OUTER JOIN

OUTER JOIN 返回两个表的并集,包括未匹配到的数据部分。根据具体的类型,OUTER JOIN 可以进一步分为 LEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOIN

LEFT OUTER JOIN

LEFT OUTER JOIN 返回左表(A)中的所有行,以及右表(B)中与左表匹配的行。如果左表中的行在右表中没有匹配项,则右表的相应列将显示为 NULL。

SELECT * FROM A LEFT OUTER JOIN B ON A.a = B.b;

-- 结果
a |  b
--+-----
1 | NULL
2 | NULL
3 |    3
4 |    4

RIGHT OUTER JOIN

RIGHT OUTER JOIN 返回右表(B)中的所有行,以及左表(A)中与右表匹配的行。如果右表中的行在左表中没有匹配项,则左表的相应列将显示为 NULL。

SELECT * FROM A RIGHT OUTER JOIN B ON A.a = B.b;

-- 结果
a    |  b
-----+----
3    |  3
4    |  4
NULL |  5
NULL |  6

FULL OUTER JOIN

FULL OUTER JOIN 返回左表和右表中的所有行。如果在某个表中没有匹配的行,则另一个表的相应列将显示为 NULL。

SELECT * FROM A FULL OUTER JOIN B ON A.a = B.b;

 a   |  b
-----+-----
   1 | NULL
   2 | NULL
   3 |    3
   4 |    4
NULL |    5
NULL |    6

总结

  1. INNER JOIN 只返回两个表中匹配的行。
  2. LEFT OUTER JOIN 返回左表中的所有行,以及右表中与之匹配的行,右表中没有匹配的行显示为 NULL。
  3. RIGHT OUTER JOIN 返回右表中的所有行,以及左表中与之匹配的行,左表中没有匹配的行显示为 NULL。
  4. FULL OUTER JOIN 返回两个表中的所有行,若一方没有匹配的行,另一方相应列显示为 NULL。