innerouter 连接之间的差异
SQL 有各种连接类型来指定结果中是否包含(非)匹配行:INNER JOIN
,LEFT OUTER JOIN
,RIGHT OUTER JOIN
和 FULL OUTER JOIN
(INNER
和 OUTER
关键字是可选的)。下图强调了这些连接类型之间的差异:蓝色区域表示连接返回的结果,白色区域表示连接不返回的结果。
交叉加入 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