关系代数之连接 (Join)和除(Division)
数据库技术中这两个概念,对初学者而言,理解比较困难,本文对此进行深入浅出的解释。
连接 (Join,联接)
定义:从两个关系的笛卡尔积中选取属性间满足一定条件的元组。记作:
其中A和B分别为R和S上度数相等且可比的属性组。θ是比较运算符。连接运算从R和S的笛卡尔积R×S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系θ的元组。
关系代数的“连接”的等价定义还有许多,如:连接(join,联接)是从两个分别为n, m目的关系R和S的广义笛卡尔积中选取满足给定条件F的元组组成新的关系称为R和S的连接,记作
其中A和B分别为R和S上度数相等且可比的属性列,θ是算术比较符(>,≥,<,≤,=,≠)。
理解:从笛卡尔积中选择满足一定条件的部分行。
说明:
① 连接运算中有两种最为重要也最为常用的连接:等值连接(equi-join)和自然连接(Natural join)。
② θ为“=”的连接运算称为等值连接。它是从关系R与S的笛卡尔积中选取A、B属性值相等的那些元组。即等值连接为:
③ 自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。即若R和S具有相同的属性组B,则自然连接可记作:
自然连接(Natural Join)是一种特殊而常用的连接。若R和S具有相同名的属性组,且连接条件为R和S中两关系所对应的同名属性列的值相等,则称为自然连接。对于自然连接,无须标明条件表达式F,在结果中要把重复的属性去掉。
例:有R和S两个关系,如下图:
查询关系R中属性C小于关系S中属性E的连接。
查询关系R中属性B与关系S中属性B相等的相等连接。
查询关系R中属性B与关系S中属性B相等的自然连接。
除(Division)
定义:给定关系R(X,Y)和S(Y,Z),其中X, Y, Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。记作:
其中Yx为x在R中的象集,。
关系代数的“除”的等价定义还有许多,但本质相同。例如,有一种比较通俗的说法是:给定关系R(x,y)与S(z)其中x,y,z为属性集(也可为单属性),R中的y和S中的z是同名的属性(集)也可以有不同的属性名, 但必须出自相同的域集。在求解R÷S时,对R按x的值的分组,然后检查每一组,如某一组中的y包含S中全部的z,则取该组中的x的值作为关系P中的一个元组, 否则不取。R÷S的商等于关系P。
例1、 设关系R, S如下图,计算R÷S的结果。
解:在关系R中,A可以取四个值{a1, a2, a3, a4}。其中:a1的象集为{(b1,c2), (b2,c3), (b2,c1)} ; a2的象集为{(b3,c7), (b2,c3)} ; a3的象集为{(b4,c6)} ; a4的象集为{(b6,c6)} 。
S在(B,C)上的投影为{(b1,c2), (b2,c3), (b2,c1)}
显然只有a1的象集包含S在(B,C)属性组上的投影,所以R÷S={a1}。
例2、关系如下,计算R÷S
R: A B C D S: C D
1 2 3 4 3 4
7 8 5 6 5 6
7 8 3 4 4 2
1 2 5 6
1 2 4 2
7 8 4 2
解:在关系R中,{A,B}可以取四个值{(1,2), (7,8), (1,2)}。其中:(1,2)的象集为{(3,4), (5,6), (4,2)} ; (7,8)的象集为{(5,6), (3,4), (4,2)} ; (1,2)的象集为{(5,6), (4,2)}
S在(C,D)上的投影为{(3,4), (5,6), (4,2)}
显然只有(1,2)和(7,8)的象集包含S在(B,C)属性组上的投影,所以R÷S是:
A B
1 2
7 8