1. 程式人生 > >inner join和outer join的區別

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
    --13243546

    注意(1,2)是A表獨有的,(3,4) 兩張共有, (5,6)是B獨有的。

    Inner join

    使用等號進行inner join以獲得兩表的交集,即共有的行。

    select*from
    a INNERJOIN b on a.a = b.b;select a.*,b.*from a,b where a.a = b.b; a | b --+--3|34|4

    Left outer join

     left outer join 除了獲得B表中符合條件的列外,還將獲得A表所有的列。

    select*from a LEFTOUTERJOIN b on a.a = b.b;select a.*,b.*from a,b where a.a = b.b(+);
    
    a |  b  
    --+-----1|null2|null3|34|4

    Full outer join

    full outer join 得到A和B的交集,即A和B中所有的行.。如果A中的行在B中沒有

    對應的部分,B的部分將是 null, 反之亦然。

    select*from a FULLOUTERJOIN b on a.a = b.b;
    
     a   |  b  
    -----+-----1|null2|null3|34|4null|6null|5