01傳統的集合運算
包括關係的並、交、差和笛卡爾積,它們都是二目運算。在進行關係的並、交、差運算時,參與運算的關係R和S必須具有相同的屬性,相應的屬性取自同一個域,並且兩個關係的屬性排列次序一樣,即R和S具有相同的結構,這是對關係進行並、交、差運算的前提條件,於是可定義以下四種運算。
並(Union)
兩個關係的並運算是將兩個關係中的所有元組構成一個新的關係,並運算要求兩個關係屬性的值必須一致,且運算的結果要消除重複的元組。
設關係R和S具有相同的關係模式,R和S的並是由屬於R或屬於S的元組構成的集合,記為R∪S。形式定義如下:R∪S≡ {t | t∈R ∨ t∈S},t是元組變量,R和S的元數相同,∨或。
2. 差(Difference)
設關係R和S具有相同的關係模式,R和S的差是由於屬於R但不屬於S的元組構成的集合,即為R-S。其形式定義如下:R-S ≡ {t | t∈R ∧ t∈S},R和S的元數相同,∧並。
3. 交(intersection)
關係R和S的交是由屬於R又屬於S的元組構成的集合,記為:R ∩ S,這裡要求R和S定義在相同的關係模式上。形式定義如下:R ∩ S ≡ {t |t∈R ∧ t∈S },R和S的元數相同。由於R∩S=R-(R-S),或R∩S=S-(S-R),因此交操作不是一個獨立的操作。
4.笛卡爾積(Cartesian Product)
在這裡的笛卡爾積嚴格地講應該是廣義的笛卡爾積,因為這裡笛卡爾積的元素是元組。在進行關係R與S的笛卡爾積實際運算時,可以從R的第一個元組開始,依次與S的每一個元組組合,生成R×S的一個新元組,然後對R的下一個元組進行同樣的運算,直到R的最後一個元組也進行完全相同的運算位置,即可得到R×S的全部元祖。
設關係R和S的元數分別為r和s,定義R和S的一個(r+s)的元組集合,每個元祖的前r個分量來自R的一個元組,後s個分量來自S的一個元組,記為R×S。定義形式如下:R×S ≡ {t| t= ∧ tr∈R ∧ ts∈S},∧並
02專門的關係運算
專門的關係運算包括選擇(Selection)、投影、連接(join),我們先來看選擇:
選擇是在關係R中選擇滿足給定條件的所有元組構成的新關係。選擇運算實際上是從關係R中選取使邏輯表達式F為真的全部元組,這是從行角度進行運算,即水平方向抽取元組。進過選擇運算得到的新關係其模式不變,但其中的元組的數目小於等於原關係中元組的個數,它是原關係的一個子集。
關係R上的投影是從R中選擇出若干屬性列組成新的關係。投影操作是從列角度進行運算。列子:在學生關係S中,查詢學生的姓名和所在系,即求S關係上學生姓名和所在系兩個屬性上的投影。
連接(join)運算是從兩個關係的笛卡爾積中選取屬性間滿足一定條件的元組。形式定義為R (連接條件) S=σ(連接條件)(R×S),其中連接條件是關係R和S上可比屬性的比較運算表達式或可比屬性組的邏輯運算表達式。
當連接條件為等式時,稱連接為等值連接(equal join)。如果兩個關系所有相同的屬性作為等值連接,而且又取消了重複屬性,則稱為自然連接(natural join)。關係R和S的自然連接記為:RS
兩個關係R和S在做自然連接時,選擇兩個關係在公共屬性上值相等的元組構成新的關係。此時,關係R匯總某些元組有可能在S中不存在公共屬性上值相等的元組,從而造成R中這些元祖造操作時被捨棄了,同樣,S中某些元組也可能被捨棄。
如果把捨棄的元組也保存在結果關係中,而在其它屬性上填空值(Null),那麼這種連接就叫做外連接(Outer join)。如果只把左邊關係R中要捨棄的元組保留就叫做左外連接(Left outer join或Left join),如果只把右邊關係S中要捨棄的元組保留就叫做右外連接(Right outer join或Right join)。