《数据库系统概念》9-附加关系运算
2019獨角獸企業重金招聘Python工程師標準>>>
?除了基本的關系操作,還有一些附加(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
?
轉載于:https://my.oschina.net/u/2327858/blog/1584785
總結
以上是生活随笔為你收集整理的《数据库系统概念》9-附加关系运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#进行Visio二次开发之Shape的
- 下一篇: 【设计模式】—— 职责链模式ChainO