您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關PostgreSQL中關系代數的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
關系代數是一種過程化查詢語言.它包括一個運算的集合,這些運算以一個或兩個關系為輸入,產生一個新的關系作為結果.關系代數是SQL查詢語言的數學基礎.
關系代數的運算對象"關系"是一張二維表,由行和列組成,通俗地說,一個關系對應一張表.
下面是本文所使用的關系:
單位信息T_DWXX
DWMC | DWBH | DWDZ |
---|---|---|
X有限公司 | 1001 | 廣東省廣州市荔灣區 |
Y有限公司 | 1002 | 北京市海淀區 |
Z有限公司 | 1003 | 廣西南寧市五象區 |
個人信息T_GRXX
DWBH | GRBH | NL |
---|---|---|
1001 | 901 | 23 |
1002 | 902 | 33 |
1002 | 903 | 43 |
關系代數的基本運算有:
名稱 | 符號 | 讀音 |
---|---|---|
選擇(select) | σ | sigma |
投影(project) | π | pi |
并(union) | ∪ | |
差(set-difference) | - | |
笛卡爾積(cartesian-product) | × | |
重命名(rename) | ρ | rou |
選擇σ
定義:σφ(R)
選擇關系R中能夠滿足給定謂詞φ的元組(Tuple),將那些不滿足謂詞的元組剔除,組成一個新的關系.
如:
σDWBH='1001'(T_DWXX),選擇單位信息中,單位編號DWBH=1001的單位信息
σNL>40(T_GRXX),選擇個人信息中,年齡NL>40的個人信息
投影Π
定義:πa1,...,an(R)
使用投影關系來過濾出我們想要的屬性,投影關系返回一個僅含有這些屬性的關系.要注意的是,由于返回的是集合,所以會過濾重復的屬性值.
如:
πDWMC(T_DWXX),返回單位信息中的單位名稱列
并∪
定義:πa1,...,an(R)∪πa1,...,an(S)
把兩個關系中的內容合并起來,或者一個關系經過不同的查詢,把結果合并在一起。并運算處理的兩個關系須具有相同的屬性。
如:
πDWBH(T_DWXX)∪πDWBH(T_GRXX)
差-
定義:πa1,...,an(R) - πa1,...,an(S)
關系R差運算關系S,剩下R中有但S中沒有的元組組成的關系.必須保證-運算在相容的關系之間進行.
如:
πDWBH(T_DWXX) - πDWBH(T_GRXX)
笛卡爾積×
定義:R × S
關系的屬性卻各不相同,對于這種情況不能使用交并差運算,但又希望把兩個不相關的關系連接起來,可以通過笛卡兒乘積,用第一個關系R中每一個元組和第二個關系S中的所有元組結合,形成一個新的關系.
如:
T_DWXX × T_GRXX,得到T_DWXX和T_GRXX的笛卡爾積,共9行數據
重命名ρ
定義:ρnewname(R)
希望改變結果的名稱,可以通過ρ重命名,為一個關系起個新的名稱.
如:
ρDW1001σDWBH='1001'(T_DWXX),把DWBH='1001'的單位信息重命名為DW1001
其他常用運算包括:
名稱 | 符號 | 讀音 |
---|---|---|
交 | ∩ | |
賦值 | ← | |
自然連接 | ? | |
θ連接 | ? | thet |
半連接 | ?/? | |
外連接 | ?/?/? | |
聚集運算 | G |
交∩
定義:R ∩ S
在R和S兩個關系中都存在的元組的新關系。要求R和S兩個關系中的元組屬性相同。
如:
πDWBH(T_DWXX) ∩ πDWBH(T_GRXX)
賦值←
定義:R←S
使用箭頭左側的名字作為右邊關系的表示.
如:
DW←πDWBH(T_DWXX)
自然連接?
定義:R ? S
自然連接將兩個表中共同屬性值都相同的元組拼接在一起作為一個新的元組,而將剩下不能拼接的部分全部舍棄,得到一個新的關系。
如:
T_DWXX ? T_GRXX
θ連接
定義:R ?θ S
組合來自兩個關系R和S的元組,而組合條件不是簡單的共同屬性上的相等,需要一種一般形式的連接算子,這就是θ連接.與自然連接不同的是,相同的屬性只會出現一次
如:
T_DWXX ?DWBH > GRBH T_GRXX,單位編號DWBH大于個人編號GRBH的單位信息和個人信息的元組組合
半連接?/?
定義: R ? S / R ? S
與S/R在共同屬性上有相等值的所有R/S中的元組
如:
T_DWXX ? T_GRXX,與個人信息中DWBH一樣的單位信息
外連接?/?/?
定義: R ? S / R ? S / R ? S
左外連接的結果包含R中所有元組,對每個元組,若在S中在統統屬性上值相等的元組,則正常連接,否則保留R中的此元組,并將S中對應的其他列設為NULL.右外連接/全外連接類似.
如:
T_DWXX ? T_GRXX,所有的單位信息,在個人信息不存在的單位,個人信息列值設置為NULL
聚集運算G
定義:Exp1,Exp2...Gfunc1,func2,...(R)
最大值/最小值/平均值/匯總/計數等.其中表達式Exp1...可選,G=MAX/MIN等
如:
DWMCGmax(DWBH)(T_DWXX),單位編號最大的單位名稱
SQL語句的運算表達式可以使用關系代數運算表示:
例一
-- SQL
SELECT c1,c2,...
FROM r1,r2,...
WHERE P
-- 關系代數
πc1,c2,...(σP(r1 × r2 × ...))
例二
-- SQL
SELECT c1,c2,...,max(c1)
FROM r1,r2,...
WHERE P
GROUP BY c1,c2,...
-- 關系代數
c1,c2,...Gmax(c1)(πc1,c2,...(σP(r1 × r2 × ...)))
感謝各位的閱讀!關于“PostgreSQL中關系代數的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。