關系代數


基本運算

選擇運算

選擇選出關系中滿足給定謂詞的元組,組成新的關系,用小寫希臘字母sigma(\(\sigma\))來表示選擇,謂詞寫作\(\sigma\)的下標,關系則作為參數在括號中出現。

選擇instructor關系中物理系的那些元組。

\[\sigma_{dept\_name="Physics"}(instructor) \]

比較運算符包括\(=,\neq, \lt, \leq, \gt, \geq\)

邏輯運算包括\(\wedge(and), \vee(or), \neg(not)\)

下面找到物理系並且工資大於90000的教師。

\[\sigma_{dept\_name="Physics" \wedge salary > 90000}(instructor) \]

選擇謂詞中也可以包括兩個屬性的比較,下面選出系名和樓名相同的系

\[\sigma_{dept\_name=building}(department) \]

投影運算

當只需要關系中的部分屬性時可以使用投影運算,用大寫字母\(\Pi(pi)\)來表示

下面選擇instructor中的ID、dept_name和salary字段。

\[\Pi_{name, dept\_name, salary}(instructor) \]

關系運算的組合

由於之前我們學的兩個運算都需要一個關系並返回一個關系,所以可以把它們組合起來。

\[\Pi_{name}(\sigma_{dept\_name="Physics"}(instructor)) \]

並運算

查詢2009年秋和2010年春開課的所有課程的集合

2009年秋

\[\sigma_{semester="Fall" \wedge year=2009}(section) \]

2010年春

\[\sigma_{semester="Spring" \wedge year=2010}(section) \]

並集

\[\sigma_{semester="Fall" \wedge year=2009}(section) \cup \sigma_{semester="Spring" \wedge year=2010}(section) \]

注意,我們不用像SQL一樣進行手動去重,因為關系本身在數學中的定義就是集合,不會有重復數據。

對於並集運算\(r\cup s\),需要滿足

  1. 關系r和s必須同元,即它們的屬性數目必須相同
  2. 它們對於r的第i個屬性\(r_i\),s的第i個屬性\(s_i\)的域和\(r_i\)的域一致

集合差運算

在2009年秋季開課但並不在2010年春季開課的課程

\[\sigma_{semester="Fall" \wedge year=2009}(section) - \sigma_{semester="Spring" \wedge year=2010}(section) \]

笛卡爾積運算

\[r \times s \]

查找物理系教師並顯示出它們教授的課程

\[\sigma_{instructor.ID=teaches.ID}(\sigma_{dept\_name="Physics"}(instructor \times teaches)) \]

更名運算

\[\rho_x(r) \]

將關系r重命名為x。

\[\rho_{x(A_1,A_2,...,A_n)}(r) \]

將關系r重命名為x,並將其中的屬性重命名為\(A_1...A_n\)

也可以使用\(\$i\)的方式訪問第\(i\)個屬性,而不用重命名屬性。

附加關系代數運算

上面的基本運算在很多時候會顯得冗長,所以要設計一些附加的符號來進行運算。

集合交運算

\[r\cap s \]

返回r和s的交集。每一個集合交運算可以通過\(r=r-(r-s)\)來得到。

自然連接

\[r\Join s \]

表示r與s進行自然連接。

外連接

左外

\[r \sqsupset \Join s \]

右外

\[r \Join \sqsubset s \]

全外

\[r \sqsupset \Join \sqsubset s \]

廣義投影

就是可以在投影的屬性里進行算術運算

\[\Pi_{F_1, F_2, ... ,F_n}(E) \]

E是關系表達式,F1到Fn是E中屬性的算術表達式

聚集函數

這個我不會打。。。

元組演算

域關系鹽酸


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM