数据库中的连接(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


参考资料 《数据库系统概论》 王珊、萨师煊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值