所谓的连接(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
参考资料 《数据库系统概论》 王珊、萨师煊