inner join和outer join的区别

时间:2024-10-30 12:16:02

outer join A和B获得的是A和B的并集(union), 即韦恩图(venn diagram)的所有部分.

示例

假定有两张表,每张表只有一列,列数据如下:

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

注意(1,2)是A表独有的,(3,4) 两张共有, (5,6)是B独有的。

Inner join

使用等号进行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

 left outer join 除了获得B表中符合条件的列外,还将获得A表所有的列。

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

Full outer join

full outer join 得到A和B的交集,即A和B中所有的行.。如果A中的行在B中没有对应的部分,B的部分将是 null, 反之亦然。

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