翻譯:關系操作
轉載自:《database.system.concepts》(數據庫系統概念)P48-52
所有的過程關系查詢語言都提供一組操作,這些操作可以應用於單個關系或一對關系。這些操作具有良好的和期望的屬性,它們的結果總是一個單一的關系。這個屬性允許一個以模塊化的方式組合其中的幾個操作。具體來說,由於關系查詢的結果本身就是一個關系,因此關系操作可以應用於查詢的結果以及給定的關系集。
具體的關系操作根據語言的不同而有所不同,但是適合我們在本節中描述的通用框架。在第3章中,我們展示了用SQL表示操作的具體方式。
ID |
名字 |
部門名稱 |
12121 |
Wu |
金融 |
22222 |
Einstein |
物理 |
33456 |
Gold |
物理 |
83821 |
Brandt |
比較科學 |
圖2.10的查詢選擇講師的結果,工資超過$85000
另一個常見的操作是從一個關系中選擇某些屬性(列)。結果是只有那些選擇的屬性的新關系。例如,假設我們想要一個教師ID和薪水的列表,而不需要從圖2.1的講師關系中列出姓名和dept的名稱值,那麽結果如圖2.211所示,具有兩個屬性ID和薪水。結果中的每個元組都來自於講師關系的一個元組,但是只包含所顯示的選定的屬性。
ID |
工資 |
10101
|
65000
|
圖2.11查詢從教師關系中選擇屬性ID和薪水的結果。
圖2.12教師和部門關系的自然連接結果。
ID |
薪水 |
12121 22222 33456 83821
|
90000 95000 87000 92000
|
圖2.13的結果是,教師的屬性ID和薪水超過了8.5萬美元。
連接操作允許將兩個關系的組合合並成一個元組,將兩個關系中的一個元組合並成一個元組。有許多不同的方式來連接關系(我們將在第3章中看到)。圖2.12顯示了一個從教師和部門表中加入元組的例子,新的元組顯示了關於每個教師和她正在工作的部門的信息。這一結果是通過將教師關系中的每個元組與教師系的部門關系中的元組相結合而形成的。
在圖2.12中所示的連接的形式中,這被稱為“自然連接”,來自於講師關系的一個元組與部門關系中的一個元組匹配,如果它們的dept名稱屬性的值相同的話。所有這些匹配的元組都出現在連接結果中。一般來說,兩個關系中的自然連接操作會匹配元組的值,這些元組的值在所有的屬性名稱中都是相同的。
笛卡爾產品操作結合了兩個關系中的元組,但是不像連接操作,它的結果包含了兩個關系中的所有元組,不管它們的屬性值是否匹配。
因為關系是集合,所以我們可以對關系進行正常的集合操作。union操作執行兩個“類似結構”的表(比如所有研究生的表和所有本科生的表)。例如,一個部門可以獲得所有學生的集合。其他的集合操作,例如交叉和設置差異也可以執行。
如前所述,我們可以對查詢結果執行操作。例如,如果我們想找到那些年薪超過8.5萬美元的教師的ID和薪水,我們將在上面的例子中執行前兩個操作。首先,我們從教師關系中選擇這些元組,其中的工資值大於$8.5,然後,從這個結果中選擇兩個屬性ID和薪水,結果顯示在圖2.13中所示的關系,包括ID和薪水。在本例中,我們可以以任意順序執行操作,但在所有情況下都不是這樣,我們將看到。
有時,查詢的結果包含重復的元組。例如,如果我們從教師關系中選擇dept name屬性,那麽就會出現一些重復的情況,包括“補償”。科學。,它出現了三次。某些關系語言嚴格遵循一個集合的數學定義,並刪除副本。另外,考慮到從大型結果關系中刪除副本所需的大量處理,保留副本。在後一種情況下,關系並不是純粹的數學意義上的關系。
當然,數據庫中的數據必須隨時間變化。可以通過插入新的元組、刪除現有的元組或修改某些屬性的值來更新關系。可以刪除整個關系,並創建新的關系。
我們將在第3章到第5章中討論使用SQL語言的關系查詢和更新。
關系代數
關系代數定義一組關於關系的運算,與通常的代數運算,如加法、減法或乘法運算,這些運算都是對數字運算的。正如在數字上的代數運算將一個或多個數字作為輸入,並返回一個數字作為輸出,關系代數運算通常會將一到兩個關系作為輸入,然後返回一個關系作為輸出。
在第六章中詳細介紹了關系代數,但是我們概述了下面的一些操作。
從兩個輸入關系輸出元組的結合。
翻譯:關系操作