自然连接,外连接,左外连接,右外连接

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表是主表,保留右边的未匹配的记录,得到右外连接



 
 

猜你喜欢

转载自542255641.iteye.com/blog/2245710
今日推荐