關係代數之連接 (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