“INNER JOIN”和“OUTER JOIN”有什么区别?

又如何做LEFT JOINRIGHT JOINFULL JOIN适应?

假设你正在加入没有重复的列,这是一个非常常见的情况:

  • A和B的内部连接给出A相交B的结果,即维恩图交点的内部部分。
  • A和B的外部连接给出了A联合B的结果,即维恩图联合的外部部分。

例子

假设你有两个表格,每个表格有一列,数据如下:

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;
select a.*, b.*  from a,b where 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;
select a.*, b.*  from a,b where 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

你也可以考虑不同的连接类型的以下模式;

添加评论

友情链接:蝴蝶教程