最近在自學看 數據庫系統概論 這本書,總結一下遇到的問題。數據庫
屬於 關係代數 裏面的 傳統的集合運算。其餘的爲union,except,intersection. spa
詳情不提了,舉個例子就是:.net
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 c1blog
行數爲 3*3 ,由於k1*k2。get
列數爲3+3, = 6.io
咱們關注這個重複行:一開始咱們同時選取名字和班級的時候,儘管班級有重複,可是整個行來講不重複就行。table
當咱們轉到了只取班級,這就有重複行了,就會被消滅(新版書上體現出來了,這裏還保留了重複行)class
大致上分:select
等值鏈接是條件鏈接在鏈接運算符爲「=」號時的特例。 nio
它是從關係R與S的廣義笛卡爾積中選取A,B屬性值相等的那些元組。
天然鏈接 :是一種特殊的等值鏈接,它要求兩個關係中進行比較的份量必須是相同的屬性組,而且在結果中把重複的屬性列去掉 等值鏈接表示爲RA=BS,天然鏈接表示爲RS;天然鏈接是除去重複屬性的等值鏈接。
二者之間的區別和聯繫以下:
一、天然鏈接必定是等值鏈接,但等值鏈接不必定是天然鏈接。等值鏈接不把重複的屬性除去;而天然鏈接要把重複的屬性除去。
二、等值鏈接要求相等的份量,不必定是公共屬性;而天然鏈接要求相等的份量必須是公共屬性。
三、等值鏈接不把重複的屬性除去;而天然鏈接要把重複的屬性除去。
外鏈接就是天然鏈接的結果加上被捨棄的懸浮元祖,沒有的屬性便設定爲NULL。
若是隻保留左邊R的懸浮元素就是左鏈接(left join),反之就是右鏈接(right join)
ps:正式名稱應該是左/右外鏈接(left/right outer join)不過通常外面的資料都是簡稱。
參考:
https://blog.csdn.net/weixin_42194151/article/details/81135212
還有 數據庫系統概論第五版