还有如何LEFT JOIN,,,,RIGHT JOINFULL JOIN适合?

答案

假设您正在加入无重复的列,这是一个非常普遍的情况:

  • a和b的内在连接给出了a相交B的结果,即A的内部维恩图路口。

  • A和B的外部连接给出了联合B的结果,即A的外部维恩图联盟。

Examples

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

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

请注意,(1,2)是a,(3,4)常见的特有的,(5,6)是B的独特。

Inner join

使用任何等效查询的内部连接给出了两个表的交点,即它们具有共同的两个行。

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

Left outer join

左外连接将使所有行分为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

Right outer join

正确的外部连接将使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

Full outer join

完整的外部连接将为您提供A和B的联合,即A中的所有行和B中的所有行。如果A中的某些内容在B中没有相应的基准,则B部分为null,并且vice viceVersa。

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

来自: stackoverflow.com