數據庫原理(八)- 關係代數

前言

關係代數是一種抽象得抽象語言,它用作對關係德運算來表達查詢。
任何一種運算都是講一定的運算符作用與一定得運算對象上,得到預期的運算結果。所以運算對象、運算符、運算結果是運算的三大要素,而關係運算符分爲傳統運算符專門運算符,如下圖:

在這裏插入圖片描述

傳統的集合運算

傳統的集合運算屬於二目運算,包括並、差、交、笛卡爾積4種運算。
我們首先假設有R和S兩種關係,且相應的屬性取自同一個域,t是元組變量,t∈R表示t是R的一個元組

R表:

A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1

S表:

A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1

並(union)

並的關係表達式爲:

 R∪S={t|t∈R∨t∈S}

我們將兩張表代入關係表達式,得出以下結果:

R∪S

A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
a1 b3 c2

可知,並操作是將兩張表的數據整合,消除重複列

差(except)

差的關係表達式爲:

R-S={t|t∈R∧t∉ S}

將兩張表代入關係表達式,得出以下結果

R-S

A B C
a1 b1 c1

假如倒轉一下,得出一下結果

S-R

A B C
a1 b3 c2

可知,差操作是將被減表的數據去除,只保留減表的特有數據

交(intersection)

交的關係表達式爲:

關係表達式 R∩S={t|t∈R∧t∈S}

將兩張表代入關係表達式,得出下結果

R∩S

A B C
a1 b2 c2
a2 b2 c1

可知,交操作是將兩張表的交集數據輸出

笛卡爾積(cartesian product)

笛卡爾積的關係表達式爲

R×S={tr ts|tr∈R∧ts∈S}

將兩張表代入關係表達式,得出以下結果

R×S

A B C A B C
a1 b1 c1 a1 b2 c2
a1 b1 c1 a1 b3 c2
a1 b1 c1 a2 b2 c1
a1 b2 c2 a1 b2 c2
a1 b2 c2 a1 b3 c2
a1 b2 c2 a2 b2 c1
a2 b2 c1 a1 b2 c2
a2 b2 c1 a1 b3 c2
a2 b2 c1 a2 b2 c1

可知,笛卡爾積的操作就是將乘表的所有元組與被乘表的元組都匹配一遍

專門的集合運算

專門的集合運算包括選擇、投影、連接和除運算等,我們先給出幾張表,等下在進行集合運算中更加清晰

學生表(student)

學號 姓名 性別 年齡 所在系
20170901 趙一 20 cs
20170902 錢二 20 cs
20170903 張三 19 ma

課程表(course)

課程號 課程名 先行課 學分
1 數據庫 1 4
2 數學 1 2
3 信息系統 2 4

成績表(sc)

學號 課程號 成績
20170901 1 82
20170902 1 92
20170902 2 85
20170903 3 90

選擇(selection)

選擇又稱爲限制,它在關係R中選擇滿足給定條件的諸元組,記作

σF(R)={t|t∈R∧F(t)='真'}

其中F表示選擇條件,它是一個邏輯表達式,取邏輯值”真“或”假“。

邏輯表達式F的基本形式爲:

X₁θY₁ 其中θ表示爲條件運算符,可以是 >、 ≧、<、 ≦、 = 和 <>(不等於)

舉個例

查詢年齡等於20歲的學生
σ 年齡列 = 20(學生表) // = 就是應用在關係式中的條件運算符

查詢結果

學號 姓名 性別 年齡 所在系
20170901 趙一 20 cs
20170902 錢二 20 cs

在基本的選擇條件之上還可以進一步的進行邏輯運算(∧與、∨或、¬非),比如

查詢一個年齡等於20的男生
σ 年齡列 = 20(學生表) a ∧性別列 = 男(學生表)

查詢結果

學號 姓名 性別 年齡 所在系
20170901 趙一 20 cs

投影(projection)

關係R上的投影是從R中選擇若干屬性列組成新的關係。記作

∏a(R)={t[A]}|t∈R}

其中A爲R的屬性列,投影操作是從列的角度進行的運算

舉個例子

查詢學生表中所有學生的學號和姓名
∏ 學號,姓名(學生表)

查詢結果

學號 姓名
20170901 趙一
20170902 錢二
20170903 張三

連接(join)

連接也稱爲θ連接,它是從兩個關係的笛卡爾積中選取屬性間滿足一定條件的元組
這裏假設兩個關係,關係中有某些屬性列相同,且值取自同一域

R

A B C
a1 b1 5
a1 b2 6
a2 b3 8
a2 b4 12

S

B E
b1 3
b2 7
b3 10
b3 2
b5 2
一般連接

在一般連接上,A和B分別爲R和S上列數相等且可比的屬性組θ爲比較運算符,記作
在這裏插入圖片描述
舉個例子

輸出 R⋈S 且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
等值連接 (equijoin)

θ爲“=”的連接運算稱爲等值連接。它是從關係R與S的廣義笛卡爾積中選取A、B屬性組值相等的那些元組,記作
在這裏插入圖片描述
舉個例子

R⋈S,且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

等值連接會去除屬性列不相等的元組

自然連接(natural join)

自然連接是一種特殊的等值連接。它要求兩個關係中進行比較的分量必須是同名的屬性組,並在結果中把重複的屬性列去掉,記作
在這裏插入圖片描述
舉個例子

自然連接 R⋈S

結果爲

A B C E
a1 b1 5 3
a1 b2 6 7
a2 b3 8 10
a2 b3 8 2
外連接 (outer join)

兩個關係自然連接時,選擇兩個關係的公共屬性上的值相等的元組構成新的關係,而那些公共屬性上的值不相等的元組就會被捨棄,這些被捨棄的元組稱爲懸浮元組
如果把懸浮元組也保存在結果關係中,而在其他屬性填空值(null),那麼這種連接就叫做外連接

如R外連接S,結果爲

A B C E
a1 b1 5 3
a1 b2 6 7
a2 b3 8 10
a2 b3 8 2
a2 b4 12 null
nul b5 null 2
左外連接 (left outer join)

如果只保留左邊關係R中的懸浮元組就叫做左外連接,如R⋊S,結果爲

A B C E
a1 b1 5 3
a1 b2 6 7
a2 b3 8 10
a2 b3 8 2
a2 b4 12 null
右外連接 (right outer join)

如果只保留右邊關係S中的懸浮元組就叫做右外連接,如R⋉S,結果爲

A B C E
a1 b1 5 3
a1 b2 6 7
a2 b3 8 10
a2 b3 8 2
nul b5 null 2

除運算(division)

我們用象集來定義除法,首先給定關係R(X,Y)和S(Y,Z),其中X、Y、Z爲屬性組。R中的Y與S中的Y可以有不同的屬性名,但必須出自相同的域集
R與S的除運算得到一個新的關係P(X),P是R中滿足下列條件的元組在X屬性列上的投影:元組在X上x分量值x的象集Yx包含S在Y上投影的集合,記作

R÷S={tr [X]|tr∈R∧∏y(S)⊆Yx}

舉個列子,這裏先列出兩張表
R

A B C
a1 b1 c2
a1 b2 c1
a2 b3 c1
a2 b4 c6

S

B C D
a1 b1 d1
a1 b2 d2

R÷S 解法

在關係R中,A可以取2個值{a1,a2}.其中:
a1的象集爲{(b1,c2),(b2,c1)}
a2的象集爲{(b3,c1),(b4,c6)}
S在(B,C)上的投影爲{(a1,b1),(a1,b2)}
顯然只有a1的象集(B,C)a₁包含了S在(B,C)屬性組上的投影,所以R÷S={a₁}

結果爲:

A
a₁

除操作是同時從行和列的角度進行運算

借鑑

王珊,薩師煊.數據庫系統概論(第五版)[M].北京:高等教育出版社,2014:48-56.
圖片出自於書上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章