《數據庫系統概念》9-附加關係運算

​除了基本的關係操做,還有一些附加(Additional)的操做,由於若是隻用基本運算,有些表達式會比較繁瑣,而附加操做是對某些基本表達的簡化。

a)交集(Set-Intersection Operation)
交集運算符爲∩,用於找出幾個集合共有的數據,好比在2009秋季和2010春季都開課的課程
(semester = 「Fall」 ∧ year=2009 (section)

(semester = 「Spring」 ∧ year=2010 (section))
交集的等價表達式爲:r ∩ s = r - (r - s)

b)Natural-Join Operation
在笛卡兒積的基礎上,選擇共有字段相等的元祖,並去除了重複的元祖。返回結果集中字段的顯示順序爲:共有字段->左側關係的字段->右側關係的字段
查詢全部教師的名稱及其授課信息的ID表達式爲:
Πname, course_id (instructor⋈teaches)
鏈接的等價表達式爲:
r⋈s = R ∪ S (r.A1 = s.A1 ∧r.A2 = s.A2 ∧ ... ∧r.An = s.An (R × S))
若是R和S沒有值相同的屬性,則r⋈s = r × s.
若是要查詢全部物理系教師名稱及授課課程的名稱則爲:
Πname,title (dept_name = 「Comp. Sci.」 (instructor⋈teaches⋈course))
無論是(instructor⋈teaches)⋈course仍是instructor⋈(teaches⋈course),運算結果不受鏈接的順序的影響

c)賦值運算Assignment Operation
符號爲←,與其餘程序語言的賦值運算同樣,←能夠將一段表達式的值賦值給某個臨時變量,避免嵌套太多難以理解。好比r⋈s的等價表達式也能夠寫爲:
temp1←R × S
temps←σr.A1 = s.A1 ∧r.A2 = s.A2 ∧ ... ∧r.An = s.An (temp1)
result=ΠR ∪ S(temp2)
←能夠將複雜的邏輯簡化爲過程式的代碼,並且←必須賦值給臨時變量。

d)外鏈接Outer join
外鏈接是鏈接運算的擴展,能夠用來處理缺失的信息,既天然鏈接中丟失的未匹配行;其中left outer join ⟕、right outer join ⟖、full outer join ⟗ 分別保留左側、右側、所有的未匹配行。
left outer join 的等價表達式爲:
(r⋈s) ∪(r-ΠR(r⋈s))×{(null,...null)}
其中{(null,...null)}的模式是S-R後的schema

e)擴展運算
廣義投影(Generalized Projection)
廣義投影容許在投影運算的同時進行算術、字符串處理的操做,好比:
Πid,name,salary*13(instructor)

彙集(aggregation)
彙集包括min、max、average、count等操做,彙集運算的輸入爲值的集合,輸出爲單一的值。教師的平均薪水能夠表示爲:
Gsum(salary)(instructor)。正確的G應該是calligraphic字體。
統計2010年春季的授課教師數量時,須要去重:
Gcount-distinct(ID)(σsemester=」spring」∧year=2010(teaches))
統計各部門的薪水平均值時,須要按部門分組,寫爲:
dept_name G averge(salary)(instructor)


學習資料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan

 spring

相關文章
相關標籤/搜索