關系代數
關系代數概述
特點
基於集合,提供了一系列的關系代數操作:並、差、笛卡爾積(廣義積)、選擇、投影和更名等基本操作
以及交、連接和關系除等擴展操作,是一種集合思維的操作語言。
關系代數操作以一個或多個關系為輸入,結果是一個新的關系。
用對關系的運算來表達查詢,需要指明所用的操作,具有一定的過程性。
∩∪×-ρσΠ÷⋈(從左往右分別為:並、交、廣義積(笛卡爾積)、差、更名、選擇、投影、除、連接)θ ∨∧
Π姓名、課程名(σ課程號=c2(R⋈S))
是一種抽象的語言,是學習其他數據庫語言,如SQL等的基礎。
關系代數的基本操作
可分為:集合操作和純關系操作
(1)集合操作
①UNION(並) R∪S
②INTERSECTION(交) R∩S
③DIFFERENCE(差) R-S
④CARTESIAN PRODUCT(笛卡爾積) R×S
(2)純關系操作
①PROJECT(投影) ΠA(R)
②SELECT(選擇) σCon(R)
③JOIN(連接) R⋈(AθB)S
④DIVISION(除) R÷S
關系代數之基本操作
(0).並相容性
某些關系代數操作,如並、差、交等,需滿足“並相容性”
參與運算的兩個關系及相關屬性之間有一定的對應性、對比性或意義關聯性。
定義:關系R與關系S存在相容性,當且僅當:
(1)關系R和關系S的屬性數目必須相同;
(2)對於任意i,關系R的第i個屬性的域必須和關系S的第i個屬性的域相同
假設:R(A1,A2,...,An),S(B1,B2,...,Bm)
R和S滿足並相容性:n=m並且Domain(Ai)=Domain(Bi)
(1).並(UNION)
定義:假設關系R和關系S是並相容的,則關系R與關系S的並運算結果也是一個關系,記作:R∪S,它由或者出現在關系R中,或者出現在S中的元組構成。
數學描述:R∪S={t|t∈R∨t∈S},其中t是元組
並運算是將兩個關系的元組合並成一個關系,在合並時去掉重復的元組。
R∪S與SUR運算的結果是同一個關系。
漢語中的“或者...或者...”通常意義是並運算的要求。
(2)差(DIFFERENCE)
定義:假設關系R和關系S是並相容的,則關系R與關系S的差運算結果也是一個關系,記作:R-S,它由或者出現在關系R中但不出現在S中的元組構成。
數學描述:R-S={t|t∈R∧t?S},其中t是元組
R-S與S-R是不同的
漢語中的“是...但不含...”通常意義是差運算的要求。
(3)廣義笛卡爾積(CARTESIAN PRODUCT)
定義:關系R(<a1,a2,...,an>)與關系S(<b1,b2,...,bm>)的廣義笛卡爾積(簡稱廣義積,或者積或者笛卡爾積)運算結果也是一個關系,記作:R×S,它由關系R中的關系S的元組進行所有可能的拼接(或串接)構成。
數學描述:R×S={<a1,a2,...,an,b1,b2,...,bm>|<a1,a2,...,an>∈R∧<b1,b2,...,bm>∈S}
當一個檢索設計到很多表時(如學生表和課程表),便需要將這些表串接或拼接起來,染后才能檢索,這時,就要使用廣義笛卡爾積運算
是后面學習各種連接運算的基礎。
R×S=S×R
兩個關系R和S,它們的屬性個數分別為n和m,元組個數分別為x和y(R是n度關系,S是m度關系)。
則笛卡爾積R×S的屬性個數=n+m。
則笛卡爾積R×S的元組個數=x×y。
(4)選擇(SELECT)
定義:給定一個關系R,同時給定一個選擇的條件condition(簡記con),選擇運算結果也是一個關系,記作σcon(R),它從關系R中選擇出滿足給定條件condition的元組構成。
數學描述:σcon(R)={t|t∈R∧con(t)=true},
設R(A1,A2,...,An),t是R的元組,t的分量記為t[Ai],或者簡寫為Ai
條件con由邏輯運算符連接比較表達式組成(邏輯運算符∨,∧,┐,或者寫為and,or,not)
比較表達式:XθY,其中X,Y是t的分量、常量或簡單函數,θ是比較運算符,θ∈{>,≥,<,≤,=,≠}。
(5)投影(PROJECT)
定義:給定一個關系R,投影運算結果也是一個關系,記作ΠA(R),它從關系R中選出屬性包含在A中的列構成。
數學描述:ΠAi1,Ai2,...,Aik(R)={<t[Ai1],t[Ai2],...,t[Aik]>|t∈R}
設R(A1,A2,...,An)
{Ai1,Ai2,...,Aik}∈{A1,A2,...,An}
t[Ai]表示元組t中相應於屬性中的分量。
投影運算可以對原關系的列在投影后重新排列
投影操作從給定關系中選出某些列組成新的關系,而選擇操作是從給定關系中選出某些行組成新的關系。
關系代數之擴展操作
(1)交(INTERSECTION)
定義:假設關系R和關系S是並相容的,則關系R與關系S的交運算結果也是一個關系,記作:R∩S,它由同時出現在關系R和關系S中的元組構成。
數學描述:R∩S={t|t∈R∧t∈S},其中t是元組
R∩S和S∩R的運算結果是同一個關系。
交運算可以通過差運算來實現:
R∩S=R-(R-S)=S-(S-R)
漢語中的“既...又...”,“...,並且...”通常意義是交運算的要求。
(2)θ-連接(θ-JOIN,theta-JOIN)
投影與選擇操作只是對單個關系(表)進行操作,而實際引用中往往涉及多個表之間的操作,這就需要θ-連接操作。
定義:給定關系R和關系S,R與S的θ連接運算結果也是一個關系,記作R⋈S(AθB),它由關系R和關系S的笛卡爾積中,選取R中屬性A與S中屬性B之間滿足θ條件的元組構成。
數學描述:R⋈S(AθB)=σt[A]θs[B](R×S)
設R(A1,A2,...,An),A∈{A1,A2,...,An}
設S(A1,A2,...,An),B∈{A1,A2,...,An}
t是關系R中的元組,s是關系S中的元組
屬性A和屬性B具有可比性。
θ是比較運算符,θ∈{>,≥,<,≤,=,≠}
在實際引用中θ-連接操作經常與投影、選擇操作一起使用。
關系與自身的θ-連接
有時在使用連接操作時我們需要自連接。這時候我們就要用到更名操作ρ。
使用ρ進行更名操作,ρnname(oname)
其中nname為新的名字,oname為以前的名字。
等值連接(Equi-Join)
當θ為=,就是等值連接,等值連接是θ-連接的一個特例(區別於自然連接)。
(1)自然連接(Natural-Join)
定義:給定關系R和關系S,R與S的而自然連接運算也是一個關系,記作R⋈S,它由關系R和關系S的笛卡爾積中,選取相同屬性組B上相等的元組所構成。
數學描述:R⋈S=σt[B]=s[B](R×S)
自然連接是一種特殊的等值連接。
要求關系R和關系S必須有相同的屬性組B(如R,S共有一個屬性B1,則B是B1,如R,S共有一組屬性B1,B2,...,Bn,則B是這些共有的所有屬性)
R,S屬性相同,值必須相等才能連接,即:
R.B1=S.B1 AND R.B2=S.B2 ... R.Bn=S.Bn才能連接。
要在結果中去掉重復的屬性列(因結果中R.Bi始終是等於S.Bi所以可只保留一列即可)。
關系代數之復雜擴展操作
(1)除(Division)
除法運算常用於求解“查詢...全部的/所有的...”問題
前提條件:給定關系R(A1,A2,...,An)為n度關系,關系S(B1,B2,...,Bm)為m度關系。如果可以進行關系R與關系S的除運算,當且僅當:屬性集{B1,B2,...,Bm}是屬性集{A1,A2,...,An}的真子集,即m<n。
定義:關系R和S的除運算結果也是一個關系,記作R÷S,分兩部分來定義。
先定義R÷S結果的屬性應有哪些?
設屬性集{C1,C2,...,Ck}={A1,A2,...,An}-{B1,B2,...,Bm},則有k=n-m則R÷S的結果關系是k度關系,由{C1,C2,...,Ck}屬性構成。
再定義R÷S的元組怎樣組成?
再設關系R(a1,a2,...,an)和關系S(b1,b2,...,bm),那么R÷S結果關系為元組<c1,c2,...,ck>的集合,元組<c1,c2,...,ck>滿足下列條件:
它與S中每一個元組<b1,b2,bm>組合形成的一個新元組都是R中的某一個元組<a1,a2,...,an>。(其中,a1,...,an,b1,...,bm,c1,...,ck分別是屬性A1,...,An,B1,...,Bm,C1,...,Ck的值)
數學描述:R÷S={t|t∈ΠR-S(R)∧∀u∈S(tu∈R)}=ΠR-S(R)-ΠR-S((ΠR-S(R)×S)-R)
(1)外連接(Outer-Join)
外連接問題的提出:有時在進行自然連接操作時會忽略掉沒有某一項屬性的元組,而我們恰恰需要整理出所有元組,這時候我們就需要外連接。
定義:兩個關系R與S進行連接時,如果R(或S)中的元組在S(或R)中找不到相匹配的元組,則為了避免該元組信息丟失,從而將該元組與S(或R)中假定存在的全為空值的元組連接,放置在結果關系中,這種連接稱之為外連接(Outer Join)。
外連接=自然連接(或θ連接)+失配的元組(與全空元組形成的連接)
外連接的形式:左外連接、右外連接、全外連接。
左外連接=自然連接(或θ連接)+左側表中失配的元組
右外連接=自然連接(或θ連接)+右側表中失配的元組
全外連接=自然連接(或θ連接)+兩側表中失配的元組
左外連接(Left Outer join)記為:R⋊S
右外連接(Right Outer Join)記為:R⋉S
全外連接(Full Outer Join)記為:R⋈S