MySQL基礎 -- 關系代數
關系代數是一種抽象的查詢語言,它用對關系的運算來表達查詢。
任何一種運算都是將一定的運算符作用於一定的運算對象上,得到預期的結果。所以運算對象、運算符、運算結果是運算的三大要素。
按運算符的不同分為傳統的集合運算和專門的關系運算兩類:
傳統的集合運算包括:並(∪)、差(−)、交(∩)、笛卡爾積(×)。
專門的關系運算包括:選擇(σ)、投影(π)、連接(⋈)、除運算(÷)。
MySQL基礎 -- 傳統的集合運算
傳統的集合運算是二目運算,並(∪)、差(−)、交(∩)、笛卡爾積(×)四種運算。
設關系 R 和關系 S 具有相同的目 n(即兩個關系都有 n 個屬性),且相應的的屬性取自同一個域,t 是元組變量,t∈R 表示 t 是 R 的一個元組。
下圖分別是具有三個屬性列的關系 R、S :
可以定義並、差、交、笛卡爾積運算如下:
1、並(union)
關系 R 與關系 S 的並由屬於 R 且屬於 S 的元組組成。其結果關系仍為 n 目關系。記作:2、差(except)
關系R與關系S的差由屬於R而不屬於S的所有元組組成。其結果關系仍為n目關系。記作:
下圖為關系R與關系S的差:
3、交(intersection)
關系R與關系S的交由既屬於R又屬於S的元組組成。其結果關系仍為n目關系。記作:4、笛卡爾積(cartesian product)
這里的笛卡爾積嚴格地講是廣義笛卡爾積(Extended Cartesian Product)。在不會出現混淆的情況下廣義笛卡爾積也稱為笛卡爾積。
兩個分別為n目和m目的關系R和S的廣義笛卡爾積是一個(n+m)列的元組的集合。元組的前n列是關系R的一個元組,后m列是關系S的一個元組。若R有k1個元組,S有k2個元組,則關系R和關系S的廣義笛卡爾積有k1×k2個元組。
記作:

下圖為關系R與關系S的笛卡爾積:
MySQL基礎 -- 專門的關系運算
專門的關系運算(Specific relation operations)包括選擇、投影、連接、除等。
為了敘述上的方便,我們先引入幾個記號。
1、設關系模式為R(A1, A2, …, An)。它的一個關系設為R。t∈R表示t是R的一個元組。t[Ai]則表示元組t中相應於屬性Ai的一個分量 。
2、若A={Ai1, Ai2, …, Aik},其中Ai1, Ai2, …, Aik是A1, A2, …, An中的一部分,則A稱為屬性列或域列。フA則表示{A1, A2, …, An}中去掉{Ai1, Ai2, …, Aik}后剩余的屬性組。t[A]=(t[Ai1], t[Ai2], …, t[Aik])表示元組t在屬性列A上諸分量的集合。
3、R為n目關系,S為m目關系。設tr∈R(r為下標),ts∈S(s為下標),則trts(整個式子上方加一個半弧,r和s為下標) 稱為元組的連接(Concatenation)。它是一個(n+m)列的元組,前n個分量為R中的一個n元組,后m個分量為S中的一個m元組。
4、給定一個關系R(X,Z),X和Z為屬性組。我們定義,當t[X]=x時,x在R中的象集(Images Set)為:

x在R中的像集為R中Z屬性對應分量的集合,而這些分量所對應的元組中的屬性組X上的值為x。
例如:x1在R中的像集Z(x1)={Z1,Z2,Z3},
x2在R中的像集Z(x2)={Z2,Z3},
x3在R中的像集Z(x3)={Z1,Z3}。
1、選擇(selection)
選擇又稱為限制(Restriction)。它是在關系R中選擇滿足給定條件的諸元組,記作:

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

選擇運算實際上是從關系R中選取使得邏輯表達是F為真的組。這是從行的角度進行的運算。
條件表達式中的運算符如表所示:
【例】設有一個學生-課程數據庫,包括學生關系Student、課程關系Course和選修關系SC。如圖所示:
【例】查詢信息系(IS系)全體學生:
select * form Student where Sdept = 'IS'
【例】查詢年齡小於20歲的學生:
select * form Student where Sage > 20
2、投影(projection)
關系R上的投影是從R中選擇出若干屬性列組成新的關系。記作:

【例】 查詢學生的姓名和所在系,即求Student關系上學生姓名和所在系兩個屬性上的投影:

select Student.Sname,Student.Sdept form Student
【例】查詢學生關系Student中都有那些系,即查詢關系Student上所在系屬性上的投影:
select Student.Sdept form Student
結果如下圖所示,Student關系原來有4個元組,而投影結果取消了重復的CS元組,因此只有三個元組:
3、除(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上投影的集合。記作:



根據關系運算的除法定義,可以得出它的運算步驟。
(1) 將被除關系的屬性分為像集屬性和結果屬性兩部分;與除關系相同的屬性屬於像集屬性;不相同的屬性屬於結果屬性。
(2) 在除關系中,對像集屬性投影,得到除目標數據集。
(3) 將被除關系分組。分組原則是:結果屬性值一樣的元組分為一組。
(4) 逐一考察每個組,如果它的像集屬性值中包括目標數據集,則對應的結果屬性應屬於該除法運算結果集。
【例】在關系R中,A可以去4個值{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,c1),(b2,c3)};
顯然只有a1的象集
包含了S在(B,C)屬性組上的投影,所以 R÷S = { a1 }。
4、連接(join)
連接也稱為θ連接,關系R與關系S的連接運算是從兩個關系的廣義笛卡爾積中選取屬性間滿足一定條件的元組形成一個新的連接:

B為包含S中的屬性的表達式;
θ通常為關系比較符。
(1)等值連接(equi join)
θ在“=”時的連接為等值連接。它是從關系R和S的廣義笛卡爾積中選取A、B屬性值相等的那些元組,即等值連接為:
(2)自然連接(natural join)
自然連接是一種特殊的等值鏈接,它要求兩個關系中進行比較的分量必須是相同的屬性組,並且在結果中把屬性重復的列去掉。即若R和S中具有相同的屬性組B,U為R和S的全體屬性集合,則自然連接可記作:
一般的連接操作是從行的角度進行運算,但自然連接還需取消重復列,所以是同時從行和列的角度進行運算。
【例】設圖中(a)和(b)分別是關系R和關系S,圖中(c)為非等值連接
的結果,圖(d)為等值連接
的結果,圖(e)為自然連接
的結果:
(3)左連接(left join)
在自然連接的基礎上加上左邊表上不包含自然連接中所含元組(行)的元組。
select * from R left join S
(4)右連接(right join)
在自然連接的基礎上加上右邊表上不包含自然連接中所含元組(行)的元組。
select * from R right join S
(5)外連接(outer join)
外連接=左連接+右連接;
select * form R outer join S