inner join 和 outer join 的区别

假设你要join两个没有重复列的表,这是最常见的情况:

  • inner join  A 和 B 获得的是A和B的交集(intersect),即韦恩图(venn diagram) 相交的部分.

  • 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

本文由尤慕译自Stack Overflow,转载请保留此信息。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值