資料庫中的連線(JOIN)
阿新 • • 發佈:2019-02-17
所謂的連線(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
$ 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
參考資料 《資料庫系統概論》 王珊、薩師煊