最近在自學看 資料庫系統概論 這本書,總結一下遇到的問題。 1.廣義笛卡爾積(Extende cartesian product): 屬於 關係代數 裡面的 傳統的集合運算。其他的為union,except,intersection. 詳情不提了,舉個例子就是: create table R(A c ...
最近在自學看 資料庫系統概論 這本書,總結一下遇到的問題。
1.廣義笛卡爾積(Extende cartesian product):
屬於 關係代數 裡面的 傳統的集合運算。其他的為union,except,intersection.
詳情不提了,舉個例子就是:
create table R
(
A char(2),
B char(2),
C char(2)
)
create table S
(
A char(2),
B char(2),
C char(2)
)
insert into R values('a1', 'b1', 'c1')
insert into R values('a1', 'b2', 'c2')
insert into R values('a2', 'b2', 'c1')
insert into S values('a1', 'b2', 'c2')
insert into S values('a1', 'b3', 'c2')
insert into S values('a2', 'b2', 'c1')
select * from R cross join S
結果:
A B C A B C
---- ---- ---- ---- ---- ----
a1 b1 c1 a1 b2 c2
a1 b2 c2 a1 b2 c2
a2 b2 c1 a1 b2 c2
a1 b1 c1 a1 b3 c2
a1 b2 c2 a1 b3 c2
a2 b2 c1 a1 b3 c2
a1 b1 c1 a2 b2 c1
a1 b2 c2 a2 b2 c1
a2 b2 c1 a2 b2 c1
行數為 3*3 ,因為k1*k2。
列數為3+3, = 6.
2.投影(projection):
關係R的投影是從關係R中選擇出若幹屬性列組成新的關係。 分為兩步: (1)選擇出指定的屬性,形成一個可能含有重覆行的表。 (2)刪除重覆行,形成新的關係。
我們關註這個重覆行:一開始我們同時選取名字和班級的時候,儘管班級有重覆,但是整個行來說不重覆就行。
當我們轉到了只取班級,這就有重覆行了,就會被消滅(新版書上體現出來了,這裡還保留了重覆行)
3.連接(join):
大體上分:
1. 等值連接(內連接)【inner join】:
等值連接是條件連接在連接運算符為“=”號時的特例。
它是從關係R與S的廣義笛卡爾積中選取A,B屬性值相等的那些元組。
自然連接 :是一種特殊的等值連接,它要求兩個關係中進行比較的分量必須是相同的屬性組,並且在結果中把重覆的屬性列去掉 等值連接表示為RA=BS,自然連接表示為RS;自然連接是除去重覆屬性的等值連接。
兩者之間的區別和聯繫如下:
1、自然連接一定是等值連接,但等值連接不一定是自然連接。等值連接不把重覆的屬性除去;而自然連接要把重覆的屬性除去。
2、等值連接要求相等的分量,不一定是公共屬性;而自然連接要求相等的分量必須是公共屬性。
3、等值連接不把重覆的屬性除去;而自然連接要把重覆的屬性除去。
2. 外連接(outer join):
外連接就是自然連接的結果加上被捨棄的懸浮元祖,沒有的屬性便設定為NULL。
如果只保留左邊R的懸浮元素就是左連接(left join),反之就是右連接(right join)
ps:正式名稱應該是左/右外連接(left/right outer join)不過一般外面的資料都是簡稱。
4.外碼(Foreign key):
需要註意的是外碼不一定要與相對的主碼同名。比如說學生關係裡面的主碼為學號,外碼是班長。當然我們都知道班長也是指向一個學號,只是為了區分我們才使用了不同名。
參考:
https://blog.csdn.net/weixin_42194151/article/details/81135212
還有 資料庫系統概論第五版