1.自然连接:
结果基于表R和S的笛卡尔乘积,取对应的R和S中相同属性组都相同的值,同时相同属性组只保留一个
(百度上是先求笛卡尔乘积,然后再筛选,那样的话效率比较低,优化的方法应该是先筛选符合条件的元组,然后再进行笛卡尔乘积)
先来看图示,2个表以及自然连接的结果
操作的步骤
1.1找出2个表中相同的属性组: 属性A加上属性B
1.2找相同属性组中,相同的属性值所对应的元组 :
相同的属性值: 1. <a1,b1>
2. <a1,b2>
相同属性值对应的元组:
第一组: <a1,b1>对应 R表:<a1,b1,d1>
S表:<a1,b1,e1>, <a1,b1,e2>
第二组 <a1,b2>对应.R表:<a1,b2,d3> <a1,b2,d4>
S表:<a1,b2,e3>
1.3同一组的元组之间进行笛卡尔乘积运算,相同属性只保留一个
(笛卡尔乘积后属性列是 R.A R.B D S.A S.B R.E,因为(R.A和S.A), (R.B和S.B)是相同属性,所以只保留一个,最终列属性只有 A B D E)
第一组结果
第二组结果
将2组的结果合并起来就得到了最终结果,这就是自然连接
2.外连接(左右外连接)
外连接是在自然连接的基础上,保留连接的一端没有匹配的元祖,另外一段用空值(null)填充
以上面的自然连接为基础,既然是左右外连接,那么左边的主表没有匹配的元组是
<a2,b1,d2> 右边没有匹配的元祖是 <a3,b2,e3> ,把这2个元组加入自然连接的表中,然后没有值的属性就赋值为null,如下图
3.左外连接,左边是主表,只保留左端未匹配的元祖
根据1的例子,可以得出左外连接
4.右边的S表是主表,保留右边的未匹配的记录,得到右外连接