您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關關系代數與數據庫關系是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
偶然間看到一句話,關系代數明白了,就沒有不會寫的SQL。讓我對曾經學過但早就不知道交給誰的“知識”,又重新燃起了興趣。下面以一個題切入
上面的公式,基于下面的圖的結果是什么, R S 的左外,右外,全外連接的圖是什么樣的。
乍看起來和數據庫有什么關系,但這些其實是寫出復雜邏輯關系的SQL 的基礎。估計現在就已經有人在,Turn your nose up ,打個賭,看完或許會改變看法呢
首先我們先要確定的一個事情是 SQL 是具有關系代數,和關系演算的雙重特點的語言。關系代數,元祖關系演算,和域關系演算三種語言在表達能力上是等價的。其中會帶出來三個完整性,其中兩個完整性是必須的,實體完整性和參照完整性,這兩個可以理解為我們平時的 主外鍵關系中的,帶有主鍵的表和帶有外鍵的表的“文雅的叫法”。
估計說到這里有人不耐煩了,馬上上操作符
1 根據上面圖中 R S ,我們可以分析出 R(X.Y) S(Y,Z)為什么因為R和S 主鍵有同類和異類,所以同類用Y 表示 不一樣的分別為 X 和 Z
這可以通過對應我們的類似下面的查詢語句來表示
select A.X,A.Y,B.Y,B.Z
from A
inner join B on A.Y=B.Y
OK 先來一個魔術
上面這張圖等于
select R.A3
from R
inner join S on R.A1A2 = S.A1A2 and S.A1 < 3
上面這個語句的select 結果是 4
是這樣的嗎 我們來逐一拆解這個圖里面的公式
1 下圖的意思,僅僅是對S 集合的數據的過濾 1< 3 的意思是 S 表的第一列的值要小于3 那我們就先對S 進行了一個WHERE 的條件操作 選中的數據
({1,9,1},{2,1,8})并且投影的S的字段是 A1A2
2 剩下的除法,在關系代數的意思就是找到兩個集合中除號前面集合中與除號后面集合中不同的列,這里就是 RA3, 所以上面的 select R.A3 就是我們最后要輸出的結果。并且前面的括號里面要求投影的S字段是 A1A2
select R.A3
from R
inner join S on R.A1A2 = S.A1A2 and S.A1 < 3
這就是上面那個公式轉換下來的SQL 語句,上邊的公式所表達的也叫關系代數。
另外在數據庫中,不是所有的數據庫都支持所有的連接方式
內連接 inner join 外連接 left join right join 或者叫left outer join right outer join 基本上都是支持的,而full outer join的方式某些數據庫是不支持的。
那不支持FULL OUTER JOIN 的數據庫怎么來處理
SELECT * FROM R
LEFT JOIN S ON R.A1A2 = S.A1A2
UNION
SELECT * FROM R
RIGHT JOIN S ON R.A1A2 = S.A1A2
就可以達到上面圖中的效果。
看完上述內容,你們對關系代數與數據庫關系是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。