innerouter 连接之间的差异

SQL 有各种连接类型来指定结果中是否包含(非)匹配行:INNER JOINLEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOININNEROUTER 关键字是可选的)。下图强调了这些连接类型之间的差异:蓝色区域表示连接返回的结果,白色区域表示连接不返回的结果。

StackOverflow 文档

交叉加入 SQL 图形演示( 参考 ):

在此处输入图像描述

以下是这个答案的例子。

例如,有两个表格如下:

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

注意,(1,2)对于 A 是唯一的,(3,4)是常见的,并且(5,6)对于 B 是唯一的。

内部联接

使用任一等效查询的内部联接给出了两个表的交集,即它们共有的两行:

select * from a INNER JOIN b on a.a = b.b;
select a.*,b.* from a,b where a.a = b.b;

a | b
--+--
3 | 3
4 | 4

左外连接

左外连接将给出 A 中的所有行,以及 B 中的任何公共行:

select * from a LEFT OUTER JOIN b on a.a = b.b;

a |  b
--+-----
1 | null
2 | null
3 |    3
4 |    4

右外连接

类似地,右外连接将给出 B 中的所有行,以及 A 中的任何公共行:

select * from a RIGHT OUTER JOIN b on a.a = b.b;

a    |  b
-----+----
3    |  3
4    |  4
null |  5
null |  6

全外连接

完全外连接将为你提供 A 和 B 的并集,即 A 中的所有行和 B 中的所有行。如果 A 中的某些内容在 B 中没有相应的数据,则 B 部分为空,并且反之亦然。

select * from a FULL OUTER JOIN b on a.a = b.b;

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