標籤:期望 cin 重複 使用 研究生 依賴 不同的 concepts ons
關係運算
所有的程式關係都為查詢語言提供了一組可以用來表示單個或多個關係的操作。這些操作具有良好並受到較高期望的屬性,能實現其結果有唯一的對應關係。
這些操作還可以用模板化的方式組合當中的幾個操作。確切的說,因為查詢結果本身就是一種關係,關係操作也可用於查詢結果以及定義所給的關係。
具體的關係操作根據語言的不同而有所不同,但是適合我們在本節中描述的通用架構。在第三章中,我們用特定的方式動作表示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
資料庫文章翻譯