INNER JOIN和OUTER JOIN的区别?

INNER JOIN(内连接)和OUTER JOIN(外连接)有什么区别呢?

假设有两个表A和B,你需要Join的列上没有重复的记录。

INNER JOIN的结果是A交B,即A,B韦恩图的交集部分;
OUTER JOIN的结果是A并B,即A,B韦恩图的并集;

举一个具体的例子来说明
表A和表B都只有一个id列,如下:

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

可以看到,1、2只在A表中有,5、6只在B表中有,而3、4是在表A和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(左表)所有的记录,以及A、B表共同的记录,其它的用null补全

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、B表共同的记录,其它的用null补全

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中不存在对应的记录用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

你还可以参考更多stackoverflow上的答案

By Code问答CodeWenda.com)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

50 − 47 =