1. 程式人生 > >資料庫中的連線(JOIN)

資料庫中的連線(JOIN)

所謂的連線(Join)就是從兩個關係的笛卡爾積中選取屬性間滿足一定條件的元組。

$ db2 "select * from R"
A   B       C
--    -- ------
a1 b1      5
a1 b2      6
a2 b3      8
a2 b4     12
  
$ db2 "select * from S"
B        E
-- ------
b1      3
b2      7
b3     10
b3      2
b5      2

1.) 一般連線,連線條件R.C < S.E
$ db2 "select A, R.B AS R_B, C, S.B AS S_B, E from R,S where C < E"
A  R_B  C S_B  E
--   ---      -- ---      --
a1 b1      5 b2    7
a1 b1      5 b3   10
a1 b2      6 b2    7
a1 b2      6 b3   10
a2 b3      8 b3   10

2.) 等值連線(Equijoin),從笛卡爾基中選取兩個屬性值相等的那些元組。 連線條件R.B = S.B
$ db2 "select A, R.B AS R_B, C, S.B AS S_B, E from R,S where R.B = S.B"
A  R_B  C S_B  E
--    ---     --  ---    --
a1 b1    5   b1    3
a1 b2    6   b2    7
a2 b3    8   b3   10
a2 b3    8   b3    2
  
3.) 自然連線(Natural Join),是一種特殊的等值連線,它會把結果中重複的屬性列去掉。
$ db2 "select A, R.B, C, E from R,S where R.B = S.B"
A  B    C  E
-- -- -- --
a1 b1  5  3
a1 b2  6  7
a2 b3  8 10
a2 b3  8  2

如果關係R中某些元組在S中不存在公共屬性上值相等的元組,這些結果被捨棄,比如R中的第4個元組,S中的第5個元組。如果把捨棄的元組也保留,在其他屬性值上填空值,這種連線叫外連線(outer join)。如果只把左邊關係R中要捨棄的元組保留,就叫做左外連線(LEFT OUTER JOIN或者LEFT JOIN),如果只把右邊關係S中要捨棄的元組保留,就叫做右外連線(RIGHT OUTER JOIN或者RIGHT JOIN)
OUTER JION
A  B    C   E
-- -- --- ---
a1 b1   5   3
a1 b2   6   7
a2 b3   8  10
a2 b3   8   2
a2 b4  12   -
-    b5     -   2

LEFT OUTER JOIN
$ db2 "select A, R.B, C, E from R left outer join S on R.B=S.B"
A  B        C      E
-- --     ------ ------
a1 b1      5      3
a1 b2      6      7
a2 b3      8     10
a2 b3      8      2
a2 b4     12      -

RIGHT OUTER JOIN
$ db2 "select A, S.B, C, E from R RIGHT outer join S on R.B=S.B"
A  B      C   E
-- -- ---   ---
a1 b1   5   3
a1 b2   6   7
a2 b3   8  10
a2 b3   8   2

-    b5    -   2

參考資料 《資料庫系統概論》 王珊、薩師煊