數據庫文章翻譯
關系運算
所有的程序關系都為查詢語言提供了一組可以用來表示單個或多個關系的操作。這些操作具有良好並受到較高期望的屬性,能實現其結果有唯一的對應關系。
這些操作還可以用模板化的方式組合當中的幾個操作。確切的說,因為查詢結果本身就是一種關系,關系操作也可用於查詢結果以及定義所給的關系。
具體的關系操作根據語言的不同而有所不同,但是適合我們在本節中描述的通用框架。在第三章中,我們用特定的方式操作表示SQL。
最常見的操作是從單個關系(比作教師)中選擇特定的元組,這些元組滿足某些特定的謂詞(比作$8.5萬美元)。其結果是一個新的關系,它是原始關系(教師)的一個子集。例如,如果我們從圖2.1的教師關系中選擇元組,滿足謂詞“薪水大於$85000”,我們得到如圖2。10所示的結果。
編號 |
姓名 |
部門 |
工資 |
12121 22222 33456 83821 |
Wu Einstein Gold Brandt |
金融 物理 物理 Comp.Sci |
90000 95000 87000 92000 |
另一個常見的操作是從一個關系中選擇某些屬性(列)。結果是只有那些選擇的屬性的新關系。例如,假設我們想要一個教師編號和薪水的列表,正如圖2.11所示,具有兩個屬性,分別為姓名和薪水,就不需要從圖2.1的教師關系表中列出姓名和部門的名稱值,其中結果的每個元組都來自於教師關系表的一個元組,但是其只包含所顯示選定的元組的屬性。
連接操作允許兩個關系的合並,合並對元組,一個從每個關系,到一個單一的元組。有許多不同的方式加入關系(如我們在第3章中所見)。圖2.12顯示了一個例子,從教師和部門表中加入了元組,新的元組顯示了她在工作中的每一個老師和部門的信息。這一結果是通過將每一個元組與在該系關系中的元組中的教師關系中的元組組成。
編號 |
工資 |
10101 12121 15151 22222 32343 33456 45565 58583 76543 76766 83821 98345
|
65000 90000 40000 95000 60000 87000 75000 62000 80000 72000 92000 80000 |
圖2.11查詢教練關系選擇屬性ID和工資的結果
編號 |
姓名 |
工資 |
部門 |
建築物 |
預算 |
10101 12121 15151 22222 32343 33456 45565 58583 76543 76766 83821 98345 |
Srinivasan WU Mozart Einstein ElSaid Gold Katz Califieri Singh Crick Brandt Kim
|
65000 90000 40000 95000 60000 87000 75000 62000 80000 72000 92000 80000 |
計算機科學 財政 音樂 物理學 歷史 物理學 計算機科學 歷史 財政 生物 計算機科學 電子工程 |
Taylor Painter Packard Watson Painter Watson Taylor Painter Painter Watson Taylor Taylor
|
100000 120000 80000 70000 50000 70000 100000 50000 120000 90000 100000 85000 |
圖2.12對教師和部門的關系自然連接的結果。
如圖2.12所示的聯接形式,稱為自然連接,從教練關系元組匹配元組ID部門關系
他們的部門屬性是相同的。所有這樣的匹配對元組都存在於聯接結果中。一般來說,在兩個關系的自然連接運算匹配元組的值,是所有的屬性名稱相同對兩者的關系。
笛卡爾產品運算結合了兩種關系中的元組,但不像連接操作,它的結果包含兩個關系中的所有元組,不管它們的屬性值是否匹配。
因為關系式集合,所以我們可以對關系進行正常的集合操作。Union操作執行兩個“相似結構”表的集合(比如一張所有研究生的桌子和一張本科生的桌子)。例如,一個部門可以獲得所有學生的集合。另一組操作,例如交叉和設置差異也可以進行。
如前面所提到的,我們可以對查詢結果執行操作。例如,如果我們想找到那些薪水超過$85.000工資的教師的身份證,我們將在示例中執行以上兩個操作。首先,我們從教師關系中選擇這些元組薪水大於$85.000。然後從結果中選擇ID和薪水兩個屬性。結果為如圖2.13所示的關系,該關系由ID組成。
編號 |
工資 |
12121 22222 33456 83821 |
90000 95000 87000 92000 |
圖2.13的結果是選擇具有更高薪水的教師的屬性ID和薪水超過$58.000。
關系代數
關系代數定義了一組操作,平行的通常的代數。列如加,減或乘。這些數字運算。正如代數運算的數量,把一個或多個數字輸入和輸出返回一個數,關系代數運算通常以一個或兩個關系作為輸入並返回一個關系。
代數運算包含第六章的一些細節,但是我們概括了以下的一些操作要點。
符號(名稱) |
使用的實例 |
選擇的項目 |
工資》=85000 |
|
返回行的輸入關系滿足預測 |
|
從所有行中輸出指定的屬性 輸入關系。刪除重復的元組 從輸出。 |
自然的加入 |
從兩個輸入的關系,具有相同的值的所有屬性的行輸出對 同名的。 |
笛卡爾積 |
從兩個輸入中輸出所有行對 關系(不管他們是否 在公共屬性上具有相同的值 |
聯合 |
從兩個輸入輸出元組的聯盟 關系. |
薪酬。在這個例子中,我們可以在其中執行操作。秩序,但情況並非如此,我們將看到,有時,一個查詢的結果中包含重復元組。例如,如果我們從講師關系中選擇部門名稱屬性,幾個案例重復,包括“合並”。“Sci,”它出現了三次。某些關系語言嚴格地依賴於集合的數學定義並移除。重復。其他,考慮到相對大量的處理需要從結果關系中刪除重復,保留。在這後一種情況,關系並不是真正的數學關系,術語感。
當然在數據庫中的數據必須要修改好多次,一種關系能夠被一種新的可選擇的元組所更新,刪除現有的元組,或是更改某些屬性的值。整個關系可以刪除和新建。
我們將討論關系查詢和更新使用SQL語言從第三章到底五章。
****選自《DATABASE SYSTEM CONCEPTS》2.6 Relational Operations
作者:Abraham Silberschatz
Henry F. Korth
S. Sudarshan
數據庫文章翻譯