SQL語句的執行一般是先翻譯為關系代數再被執行的(能有效提高執行速度),是以我們有必要
了解關系代數與SQL語句間的對應關系。
就像高中代數由+-*/和數字組成,關系代數是由union、intersection、join等運算符和關系執行個體
組成的。
關系代數有五個基礎運算符,這五個基礎運算符能派生出其他組合運算符。它們分别是:
選擇(σ, selection)、投影(π, projection)、叉乘(x, cross-product)、
差(-, set-difference)和并(υ, union)
它們和SQL語句的對應關系為:
選擇(σ, selection)相當于SQL語句中的where,表示選出滿足一定條件的行。
如:σ rating>8 (S2)相當于 select * from S2 where rating>8;
投影(π, projection)相當于SQL語句中的select。。。distinct, 表示選擇哪些列。注意:投影是會去重的!
如:π sname,rating (σ rating>8 (S2))相當于 select sname, rating from S2 where rating>8;
叉乘(x, cross-product)相當于SQL語句中的from,表示窮舉所有集合兩邊元素的組合量
如: AxB 相當于 select * from A, B; 注意:叉乘時兩個集合不能有重名列
差(-, set-difference)R-S傳回所有在R中而不在S中的元組
并(υ, union)RυS傳回包含在R中或在S中的所有元組
注意:并、交、差都要求兩個關系執行個體是并相容的。 并相容指:1. 兩個關系執行個體字段數相同 2. 對應字段類型、取值範圍相同
合成運算符:
合成運算符是由基礎運算符組合派生而來的,算是一種速記标志。
交(∩, intersection) R∩S傳回既在R中又在S中的元組。
自然連接配接(⋈, natural join)相當于先做叉乘,再選擇公共屬性一樣的關系執行個體。如果沒有公共屬性的話,那麼結果就是叉乘
除(÷, division)r÷s, 傳回r中包含與s共有列但其他列不同的關系執行個體。
例如:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SOkRTY1QjYmVmNwcDZxEjYhNzYmNTNjF2M5UTY2IWZ28CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
r的上下藍色和金黃色部分包含s,而中間橙色部分僅部分包含s,白色部分完全不包含s,是以r÷s=