数据库杂谈(三)——关系代数
文章目錄
- 3 形式化關系查詢語言
- 3.1 關系代數
- 3.1.1 概述
- 3.1.2 選擇操作
- 3.1.3 投影操作
- 3.1.4 集合操作
- 3.1.4.1 笛卡爾乘積
- 3.1.4.2 并交差操作
- 3.1.5 連接操作
- 3.1.6 更名操作
- 3.1.7 除操作
- 3.1.8 外連接
- 3.1.9 外并操作
- 3.1.10 賦值操作
- 3.1.11 練習
3 形式化關系查詢語言
3.1 關系代數
3.1.1 概述
關系代數語言是一種過程化查詢語言,它包括一個運算的集合,這些運算以一個或兩個關系為輸入,產生一個新的關系作為結果。
需要注意的是,在一些書上關系代數也叫做關系代數操作,簡稱關系操作。
關系代數一般包含五個基本操作,如果一個系統或者數據庫產品包含這五個基本操作,那我們認為這個系統的功能是完備的。
任何的操作都可以通過這五個操作來組合完成,如下所示:
| 選擇操作 | select operation | σσσ |
| 投影操作 | project operation | π |
| 笛卡爾乘積 | Cross product | × |
| 集合差操作 | Set - diffrent | ? |
| 集合并操作 | union | ∪ |
在《數據庫原書(第6版)》中,出現了更名這一基本操作,但是在大多數的考試中,基本操作還是以上表為準。
其中選擇投影和更名為一元運算,因為它們只對一個關系進行操作;而另外三個對兩個關系進行運算,故為二元運算。
事實上,目前流行的關系數據庫中,除了滿足關系完備性以外,還增加了不少關系代數所不支持的操作,如排序、分組、聚集函數,甚至是傳遞閉包的計算。
在學習的過程中,對于考試我們不僅需要掌握關系代數符號,還需要掌握會寫關系代數表達式。
3.1.2 選擇操作
選擇操作就是加限制條件選元組。如下圖所示:
黃色部分即為選中結果。
需要注意的是,基本操作都是支持多種運算的組合的,比如選擇和投影和連接和集合運算一起使用,這都是可以的,但是要注意先后順序,這在后面我們會給出演示。
3.1.3 投影操作
投影就是選取關系中的某些列,即選取某些屬性。如下圖所示:
這里有幾個需要注意的點:
- 投影后的表由于有可能不包含候選鍵,這就會導致有些元組可能是重復的,這時候系統會自動消除重復元組,所得關系(表)的元組數小于原關系的元組數。如果投影后的表包含候選鍵,那么元組數和投影前一樣。
- 在實際的數據庫產品中,數據庫投影后他是不會自動去重的,因為數據庫他不能保證用戶對重復的數據是否有應用價值,所以,除非你要求,不然他不會自動去重。
3.1.4 集合操作
3.1.4.1 笛卡爾乘積
集合操作指的是并、交、差和笛卡爾乘積
在表的連接查詢方面有一種現象被稱為:笛卡爾積現象(笛卡爾乘積現象),也就是說,你可以理解為兩張表做笛卡爾乘積,等于兩張表中所有元組兩兩匹配的所有結果,如圖所示:
關系一有6條元組,關系二也是6條,那么做笛卡爾乘積,所得的關系就是36條元組。
當然,我們說的連接,實際上就是加了條件的笛卡爾乘積。
3.1.4.2 并交差操作
這個概念和我們數學中集合的概念是一樣的,但是對于數據庫來說,它會出現一些問題。
如果是以上的兩張表做并操作,那么這是完全沒有辦法的,老師表中的屬性和學生表的屬性完全不一樣,你總不能直接把數據貼上去吧?對此,我們引入了并兼容這個概念。
并兼容要求參與并交差的兩個關系的元組必須限制為同類型,也就是相同目,對應的屬性的域也需相同。
3.1.5 連接操作
連接其實和笛卡爾乘積很像,連接實際上就是一個加了條件的笛卡爾乘積,他只找出那些滿足條件的元組。其符號為?\bowtie?。
一般來說,我們的連接符號代表的都是自然連接,即笛卡爾乘積加上默認條件外鍵相等。下面舉個例子:
如果是對這兩張表做連接,其結果實際上為:
| S01 | C01 | 92 | S01 | 王二 | 男 |
| S02 | C02 | 90 | S02 | 張三 | 男 |
| S02 | C03 | 82 | S02 | 張三 | 男 |
| S03 | C01 | 80 | S03 | 李四 | 男 |
其默認Sno為外鍵,通過外鍵進行連接了。
3.1.6 更名操作
如果你在一條關系代數表達式中引用了兩張同樣的表,例如學生表連接學生表,為了沒有歧義,你可以使用更名,更名用希臘字母rho(ρ\rhoρ)來表示,對于你指定的關系代數表示式E,表示式ρx(E)\rho_x(E)ρx?(E)返回表示式E的結果,并把名字x賦給了它。
實際上,還可以把更名的表示式寫出ρ(A1,A2...,An)(E)\rho_{(A_1,A_2...,A_n)}(E)ρ(A1?,A2?...,An?)?(E),其中AnA_nAn?表示E得出來的結果對表中各屬性進行重命名。
比如ρ學生表1(學生表)\rho_{學生表1}(學生表)ρ學生表1?(學生表)就是一個更名。
實際上在考試中根本不需要更名操作,因為考試出的題很少出現歧義問題。
3.1.7 除操作
除法操作不好用定義來解釋,看下圖:
在<a1,b1>里和<a2,b2>里,明顯對應的R.3和R.4都包含了S表,所以{<a1,b1>,<a2,b2>}就是除法的結果。其他不含S表的<a3,b3>可以看做結果的余數。
需要注意的是,除法操作并不是基本操作,這就說明其可以由基本操作來表示。這在考試中如果故意刁難是會涉及到的。
3.1.8 外連接
想要知道什么是外連接,就要知道什么是內連接。
內連接:假設A和B表進行連接,使用內連接的話,凡是A表和B表能夠匹配上的記錄查詢出來,就是內連接,AB兩張表沒有主副之分,兩張表是平等的。
外連接:假設A和B表進行連接,使用外連接的話,AB兩張表中有一張表是主表,一張表是副表,主要查詢主表中的數據,捎帶著查詢副表,當副表中的數據沒有和主表中的數據匹配上,副表自動模擬出NULL與之匹配。
外連接分類:
左外連接(左連接):表示左邊的這張表是主表。
右外連接(右連接):表示右邊的這張表是主表。
左連接有右連接的寫法,右連接也會有對應的左連接的寫法。為什么這么說,當你左連接想寫成右連接的時候,你把表對調一下就可以了。
連接的本質是加上了條件的笛卡爾積,也就是說表1和表2做連接,那么是表1的元組去匹配滿足條件的表2的元組,不滿足條件則不錄入結果表;但是對于左外連接,表1的所有元組都會在結果表中,即使它沒有匹配到符合條件的表2元組,它也會存在,且匹配不了的表2元組在結果表位置用NULL填充。
3.1.9 外并操作
我們前面說過,兩個表若不滿足并兼容是不可以進行集合并交差操作的,但是可以進行外并操作,即強行整合兩表,結果的屬性是兩表屬性的總和,如果其他表沒有另外一個表的屬性,那么那一列會被填上NULL。
3.1.10 賦值操作
我們如果不想寫出一條關系代數表達式來表示某個結果,而想拆分成兩個步驟,那么我們可以使用賦值操作,其符號為←←←。例如:
temp1 = R×S
temp2 ← σsno=S01(S)σ_{sno = S01}(S)σsno=S01?(S)
result ← temp1×temp2
實際上,這個更名操作在考試中根本用不到,因為你通常都是通過嵌套的方式一口氣寫完一整條的關系代數表達式,而不會寫出來兩條。
3.1.11 練習
設有一個零件供應關系數據庫,它包括S、P、J、SPJ四個關系,請按要求寫出關系代數表達式。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的数据库杂谈(三)——关系代数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机专业毕业设计资料免费下载
- 下一篇: 均线突破matlab编程,通达信均线粘合