天天看點

mysql将sql轉為關系代數_關系代數(Relation Algebra)與SQL語句的對應關系

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共有列但其他列不同的關系執行個體。

例如:

mysql将sql轉為關系代數_關系代數(Relation Algebra)與SQL語句的對應關系

r的上下藍色和金黃色部分包含s,而中間橙色部分僅部分包含s,白色部分完全不包含s,是以r÷s=

mysql将sql轉為關系代數_關系代數(Relation Algebra)與SQL語句的對應關系