數(shù)據(jù)庫系統(tǒng)原理之關(guān)系代數(shù)

關(guān)系代數(shù)基于集合(關(guān)系)榴鼎,定義了一系列對集合(關(guān)系)對操作。如并晚唇,差巫财,笛卡爾積,選擇哩陕,更名平项,投影等基本操作,以及基于基本操作推導(dǎo)出來的擴展操作悍及。
關(guān)系代數(shù)作用于一個或多個關(guān)系闽瓢,然后產(chǎn)生一個新的關(guān)系⌒母希可以將關(guān)系代數(shù)理解為函數(shù)扣讼,接受一個關(guān)系輸入,返回一個新對關(guān)系缨叫。舉個例子椭符,我們將并操作命名為 Union,那么并操作可以表示為:

output:R = Union(input:R);

對于其他對操作如差操作耻姥,選擇操作等销钝,都有相應(yīng)對數(shù)學(xué)符號進行表示,但在簡書中輸入這些符號比較困難琐簇,再加上我學(xué)習(xí)關(guān)系代數(shù)是了解基本的概念知識蒸健,這里就不使用數(shù)學(xué)符號表示了,而是以文字代替婉商。
關(guān)系代數(shù)定義了基于集合(關(guān)系)的操作似忧,其是 SQL 的重要基礎(chǔ)(另一個重要基礎(chǔ)是關(guān)系演算),了解了關(guān)系代數(shù)的概念以及各個操作要達到的目的之后据某,對 SQL 中對一些概念也會更加清晰橡娄,如連接操作。
本文首先介紹關(guān)系代數(shù)中的基礎(chǔ)操作癣籽,再介紹擴展操作挽唉。

基礎(chǔ)操作

關(guān)系代數(shù)的基礎(chǔ)操作有:并,差筷狼,笛卡爾積瓶籽,選擇,更名埂材,投影等塑顺。有些操作如并,差等要求參與運算的關(guān)系需要具備并相容性。所謂并相容性严拒,就是兩個關(guān)系的屬性數(shù)目(度)相同扬绪,并且每個度所在的域相同。
R(學(xué)生,學(xué)號,地址)S(課程,課程號) 兩個關(guān)系由于度和屬性所在的域不相同裤唠,因此不具備并相容性挤牛,也就無法進行并,差等操作种蘸。
相應(yīng)的墓赴,R2(學(xué)生,學(xué)號,地址)S(教師,教師號,地址) 由于度和屬性所在的域相同,因此具備并相容性航瞭。

并操作

并操作就是將兩個關(guān)系合并為一個關(guān)系诫硕,在合并時去掉重復(fù)的元組。為什么要去掉重復(fù)項呢刊侯?這是集合的特質(zhì)章办,集合要求不能有重復(fù)項。
R 并 S 和 S 并 R 得到的結(jié)果是一樣的滔吠,即并操作滿足交換律纲菌。
舉個例子挠日,有兩個關(guān)系 R(學(xué)生) 和 S(教師):

姓名 學(xué)號 地址
Mary 1 美國
Jerry 2 澳大利亞
馬云 3 中國
姓名 教師號 地址
王力 1 中國
Jerry 2 澳大利亞
劉東 3 中國

這兩個關(guān)系進行并操作的結(jié)果為:

姓名 學(xué)號/教師號 地址
Mary 1 美國
Jerry 2 澳大利亞
馬云 3 中國
王力 1 中國
劉東 3 中國

差操作

差操作用來選擇出現(xiàn)在一個關(guān)系但并未出在另一個關(guān)系中的元組疮绷。
還是以上面兩個關(guān)系 R(學(xué)生)S(教師) 為例,R 差 S 的結(jié)果為:

姓名 學(xué)號/教師號 地址
Mary 1 美國
馬云 3 中國

S 差 R 的結(jié)果為:

姓名 學(xué)號/教師號 地址
王力 1 中國
劉東 3 中國

其中元組 T(Jerry,2,澳大利亞) 在兩個關(guān)系中都出現(xiàn)嚣潜,是兩個關(guān)系的交集冬骚。因此差操作就是從一個關(guān)系中去除和另一個關(guān)系的交集所得到的集合。
差操作不滿足交換律懂算。

笛卡爾積

笛卡爾積用來將兩個關(guān)系連接起來只冻,笛卡爾積的結(jié)果將兩個關(guān)系中所有可能的元組組合起來。假設(shè)關(guān)系 R 的元組數(shù)目為 M计技,度數(shù)為 I喜德,關(guān)系 S 的元組數(shù)目為 N,度數(shù)為 J垮媒,那么 R 和 S 進行笛卡爾積運算得到的新關(guān)系的元組數(shù)目為 M * N舍悯,度數(shù)為 I + J。
舉個例子睡雇,有兩個關(guān)系 R(學(xué)生)S(課程)

姓名 學(xué)號 課程號
Mary s1 c1
Jerry s2 c2
Mike s3 c2
課程名 課程號
軟件工程 c1
軟件測試 c2
數(shù)據(jù)庫系統(tǒng)原理 c3

那么對 R 和 S 進行笛卡爾積的結(jié)果為:

姓名 學(xué)號 課程 課程號
Mary s1 軟件工程 c1
Jerry s2 軟件工程 c1
Mike s3 軟件工程 c1
Mary s1 軟件測試 c2
Jerry s2 軟件測試 c2
Mike s3 軟件測試 c2
Mary s1 數(shù)據(jù)庫系統(tǒng)原理 c3
Jerry s2 數(shù)據(jù)庫系統(tǒng)原理 c3
Mike s3 數(shù)據(jù)庫系統(tǒng)原理 c3

笛卡爾積用來將兩個關(guān)系連接在一起萌衬,獲取所有可能的結(jié)果,其是連接操作的基礎(chǔ)它抱。

選擇操作

選擇操作就是從一個關(guān)系中秕豫,選擇出滿足條件的元組。
如從上面的學(xué)生表中观蓄,選擇出學(xué)號大于等于 2 的學(xué)生混移,結(jié)果為:

姓名 學(xué)號 地址
Jerry 2 澳大利亞
馬云 3 中國

選擇條件由與或非邏輯表達式構(gòu)成祠墅。

投影操作

投影操作是從給定的關(guān)系中,選擇出某些屬性屬性構(gòu)成新的關(guān)系歌径。如從學(xué)生表中投影出一個新的關(guān)系 R(姓名,地址)

姓名 地址
Jerry 澳大利亞
馬云 中國

擴展操作

關(guān)系代數(shù)常用的擴展操作有交操作饵隙,Theta 連接操作,自然連接操作沮脖,外連接操作金矛,除操作等。擴展操作可以由基礎(chǔ)操作推導(dǎo)而來勺届。

交操作

交操作用來從兩個關(guān)系中驶俊,選擇出同時存在于兩個關(guān)系中的元組。如上面 R(學(xué)生)S(教師) 進行交操作的結(jié)果為:

姓名 學(xué)號/教師號 地址
Jerry 2 澳大利亞

Theta 連接操作

Theta 連接操作會從兩個關(guān)系的笛卡爾積中免姿,選擇出某個條件的元組饼酿,并去掉重復(fù)項。例如在上面笛卡爾積例子胚膊,選擇出課程號不為 c1 并且學(xué)號不為 s1 的元組:

姓名 學(xué)號 課程 課程號
Jerry s2 軟件測試 c2
Mike s3 軟件測試 c2
Jerry s2 數(shù)據(jù)庫系統(tǒng)原理 c3
Mike s3 數(shù)據(jù)庫系統(tǒng)原理 c3

連接操作一般和投影操作配合使用故俐,比如從上面的結(jié)果集中投影出 R(姓名,課程)

姓名 課程
Jerry 軟件測試
Mike 軟件測試
Jerry 數(shù)據(jù)庫系統(tǒng)原理
Mike 數(shù)據(jù)庫系統(tǒng)原理

Theta 連接操作中有個特殊的操作,叫做等值連接紊婉,即選擇條件為判斷是否相等药版。

自然連接操作

自然連接可以認(rèn)為是一種特殊的等值連接,其要求兩個關(guān)系具有相同的屬性喻犁,并且判斷條件為兩個關(guān)系中的某兩個相同屬性的值相等槽片。
自然連接是最常用的連接操作。
假如有兩個關(guān)系 R(學(xué)生 )S(班級)

姓名 學(xué)號 班級
Jerry s2 高二八班
Mike s3 高三一班
Jerry s2 初一二班
Mike s3 初三一班
班級 班主任
高二八班 馬云
高三一班 劉東
初一二班 史柱
初三一班 李彥

對這兩個關(guān)系進行自然連接的結(jié)果為:

姓名 學(xué)號 班級 班主任
Jerry s2 高二八班 馬云
Mike s3 高三一班 劉東
Jerry s2 初一二班 史柱
Mike s3 初三一班 李彥

外連接

外連接就是在自然連接的結(jié)果集中肢础,將空值元組和沒有匹配到的元素放入到結(jié)果集中还栓。
假如有兩個關(guān)系 R(學(xué)生 )S(班級)

姓名 學(xué)號 班級
Jerry s2 高二八班
Mike s3 高三一班
Jerry s2
Mike s3 初三一班
班級 班主任
高二八班 馬云
高三一班 劉東
高三五班 陳天
史柱

首先對這兩個關(guān)系進行自然連接:

姓名 學(xué)號 班級 班主任
Jerry s2 高二八班 馬云
Mike s3 高三一班 劉東

我們在自然連接的結(jié)果集中,機上空值元組和沒有匹配到的元組:

姓名 學(xué)號 班級 班主任
Jerry s2 高二八班 馬云
Mike s3 高三一班 劉東
高三五班 陳天
Jerry s2
史柱

以上就是外連接的結(jié)果传轰,也叫做全外連接:保證兩端的元素不丟失剩盒。對應(yīng)的,還有左外連接和右外連接慨蛙,左外連接會保證左側(cè)的元素不丟失辽聊,右外連接會保證右側(cè)的元素不丟失。
因此上面兩個進行左外連接的結(jié)果為:

姓名 學(xué)號 班級 班主任
Jerry s2 高二八班 馬云
Mike s3 高三一班 劉東
Jerry s2

進行右外連接的結(jié)果為:

姓名 學(xué)號 班級 班主任
Jerry s2 高二八班 馬云
Mike s3 高三一班 劉東
高三五班 陳天
史柱

除操作

除操作是對兩個關(guān)系進行“除法”操作股淡,要求“除數(shù)”關(guān)系是“被除數(shù)”關(guān)系的真子集身隐。除操作會從“被除數(shù)”關(guān)系中,選擇出一個新的關(guān)系唯灵,設(shè)為 N贾铝,N 也是 “被除數(shù)”關(guān)系的真子集。N 需要滿足一個條件:
N 和“除數(shù)”關(guān)系的笛卡爾積是“被除數(shù)”關(guān)系的最大真子集。
好繞啊···
我們還是直接看例子吧垢揩。
假設(shè)有兩個關(guān)系:R(A1,A2,A3)S(A3)

A1 A2 A3
a b c
d b c
a e c
a e f
d b f
a e g
a e h
a b i
A3
c

對 R 和 S 進行除操作玖绿,得到的結(jié)果為:

A1 A2
a b
d b
a e

如果 S 關(guān)系為:

A3
c
f

那么對 R 和 S 進行除操作的結(jié)果為:

A1 A2
d b
a e

從上面的例子來看,除操作適用于“滿足全部····”的查詢叁巨。舉個例子斑匪,從學(xué)生表中查詢選擇了所有課程或者選擇了軟件測試和軟件工程這兩門課程的學(xué)生。
假設(shè)存在一個關(guān)系 R(學(xué)生)S(課程)

姓名 學(xué)號 課程號
Jerry s2 c2
Mike s3 c2
Carry s4 c1
Lucy s5 c3
課程名 課程號
軟件工程 c1
軟件測試 c2
數(shù)據(jù)庫系統(tǒng)原理 c3

現(xiàn)在我們要查詢選擇了軟件測試這門課的所有學(xué)生锋勺,則被除數(shù)關(guān)系為 R(學(xué)生)蚀瘸,除數(shù)關(guān)系為:

課程號
c1

對兩個關(guān)系進行除操作,得到的結(jié)果為:

姓名 學(xué)號
Jerry s2
Mike s3

如果我們只需要獲取學(xué)生的姓名庶橱,不需要學(xué)號這一列贮勃,那么可以再對結(jié)果集進行投影操作:

姓名
Jerry
Mike

總結(jié)

本文介紹了關(guān)系代數(shù)以及關(guān)系代數(shù)中常用的基礎(chǔ)操作和擴展操作,基礎(chǔ)操作包括并苏章,差寂嘉,笛卡爾積,選擇枫绅,投影泉孩,更名等,某些基礎(chǔ)要做要求兩個參與運算的關(guān)系具有并相容性并淋。擴展操作可以由基礎(chǔ)操作推導(dǎo)而來寓搬,可以完成更復(fù)雜的操作。
關(guān)系代數(shù)是 SQL 語言的基礎(chǔ)预伺,SQL 語言是在關(guān)系代數(shù)上的一層封裝订咸,目的是方便程序員使用曼尊。
關(guān)系代數(shù)的操作接受一個或多個關(guān)系作為輸入酬诀,再輸出一個新的關(guān)系,不同的關(guān)系操作可以進行相互的組合骆撇。例如可以先進行選擇操作再進行投影操作瞒御,先進行自然連接操作再進行選擇操作等等。根據(jù)不同的需求需要靈活的組合這些操作神郊。

完肴裙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涌乳,隨后出現(xiàn)的幾起案子蜻懦,更是在濱河造成了極大的恐慌,老刑警劉巖夕晓,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宛乃,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機征炼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門析既,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谆奥,你說我怎么就攤上這事砾层⊥继穑” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長不同。 經(jīng)常有香客問我,道長戴尸,這世上最難降的妖魔是什么笑跛? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮逢渔,結(jié)果婚禮上肋坚,老公的妹妹穿的比我還像新娘。我一直安慰自己肃廓,他們只是感情好智厌,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盲赊,像睡著了一般铣鹏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哀蘑,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天诚卸,我揣著相機與錄音,去河邊找鬼绘迁。 笑死合溺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缀台。 我是一名探鬼主播棠赛,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼膛腐!你這毒婦竟也來了睛约?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤哲身,失蹤者是張志新(化名)和其女友劉穎辩涝,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勘天,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡怔揩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年棍丐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沧踏。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡歌逢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翘狱,到底是詐尸還是另有隱情秘案,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布潦匈,位于F島的核電站阱高,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茬缩。R本人自食惡果不足惜赤惊,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凰锡。 院中可真熱鬧未舟,春花似錦、人聲如沸掂为。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勇哗。三九已至昼扛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間欲诺,已是汗流浹背抄谐。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扰法,地道東北人蛹含。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像迹恐,于是被迫代替她去往敵國和親挣惰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349