今天就跟大家聊聊有關(guān)關(guān)系代數(shù)與數(shù)據(jù)庫關(guān)系是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、密云網(wǎng)絡(luò)推廣、成都小程序開發(fā)、密云網(wǎng)絡(luò)營銷、密云企業(yè)策劃、密云品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供密云建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
偶然間看到一句話,關(guān)系代數(shù)明白了,就沒有不會(huì)寫的SQL。讓我對(duì)曾經(jīng)學(xué)過但早就不知道交給誰的“知識(shí)”,又重新燃起了興趣。下面以一個(gè)題切入
上面的公式,基于下面的圖的結(jié)果是什么, R S 的左外,右外,全外連接的圖是什么樣的。
乍看起來和數(shù)據(jù)庫有什么關(guān)系,但這些其實(shí)是寫出復(fù)雜邏輯關(guān)系的SQL 的基礎(chǔ)。估計(jì)現(xiàn)在就已經(jīng)有人在,Turn your nose up ,打個(gè)賭,看完或許會(huì)改變看法呢
首先我們先要確定的一個(gè)事情是 SQL 是具有關(guān)系代數(shù),和關(guān)系演算的雙重特點(diǎn)的語言。關(guān)系代數(shù),元祖關(guān)系演算,和域關(guān)系演算三種語言在表達(dá)能力上是等價(jià)的。其中會(huì)帶出來三個(gè)完整性,其中兩個(gè)完整性是必須的,實(shí)體完整性和參照完整性,這兩個(gè)可以理解為我們平時(shí)的 主外鍵關(guān)系中的,帶有主鍵的表和帶有外鍵的表的“文雅的叫法”。
估計(jì)說到這里有人不耐煩了,馬上上操作符
1 根據(jù)上面圖中 R S ,我們可以分析出 R(X.Y) S(Y,Z)為什么因?yàn)镽和S 主鍵有同類和異類,所以同類用Y 表示 不一樣的分別為 X 和 Z
這可以通過對(duì)應(yīng)我們的類似下面的查詢語句來表示
select A.X,A.Y,B.Y,B.Z
from A
inner join B on A.Y=B.Y
OK 先來一個(gè)魔術(shù)
上面這張圖等于
select R.A3
from R
inner join S on R.A1A2 = S.A1A2 and S.A1 < 3
上面這個(gè)語句的select 結(jié)果是 4
是這樣的嗎 我們來逐一拆解這個(gè)圖里面的公式
1 下圖的意思,僅僅是對(duì)S 集合的數(shù)據(jù)的過濾 1< 3 的意思是 S 表的第一列的值要小于3 那我們就先對(duì)S 進(jìn)行了一個(gè)WHERE 的條件操作 選中的數(shù)據(jù)
({1,9,1},{2,1,8})并且投影的S的字段是 A1A2
2 剩下的除法,在關(guān)系代數(shù)的意思就是找到兩個(gè)集合中除號(hào)前面集合中與除號(hào)后面集合中不同的列,這里就是 RA3, 所以上面的 select R.A3 就是我們最后要輸出的結(jié)果。并且前面的括號(hào)里面要求投影的S字段是 A1A2
select R.A3
from R
inner join S on R.A1A2 = S.A1A2 and S.A1 < 3
這就是上面那個(gè)公式轉(zhuǎn)換下來的SQL 語句,上邊的公式所表達(dá)的也叫關(guān)系代數(shù)。
另外在數(shù)據(jù)庫中,不是所有的數(shù)據(jù)庫都支持所有的連接方式
內(nèi)連接 inner join 外連接 left join right join 或者叫l(wèi)eft outer join right outer join 基本上都是支持的,而full outer join的方式某些數(shù)據(jù)庫是不支持的。
那不支持FULL OUTER JOIN 的數(shù)據(jù)庫怎么來處理
SELECT * FROM R
LEFT JOIN S ON R.A1A2 = S.A1A2
UNION
SELECT * FROM R
RIGHT JOIN S ON R.A1A2 = S.A1A2
就可以達(dá)到上面圖中的效果。
看完上述內(nèi)容,你們對(duì)關(guān)系代數(shù)與數(shù)據(jù)庫關(guān)系是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。