目錄
有了數據庫,還要通過查詢來獲得數據。SQL是常用的查詢語言,但我想用更抽象的查詢語言來表達,從思路上去理解而忽略實現細節。下面將介紹關係代數。
數據庫實例
在介紹查詢語言之前,先定義一個數據庫實例:
Sailors(sid: integer, sname: string, rating: interger, age: real)
Boats(bid: integer, bname: string, color: string)
Reserves(sid: integer, bid: integer, day: date)
關係代數
選擇與投影
選擇和投影均可對單個關係進行操作。選擇行的操作符爲 ,投影列的操作符爲 ,兩種操作均可以添加檢索條件。
等級大於8的水手:
所有水手名字和等級:
集合操作
每個關係都可以看作實例的集合,因此可以對兩個關係進行集合操作。集合操作包括交,並,差以及笛卡爾積,操作符分別爲 , , , 。兩個關係進行集合操作的結果仍爲關係。
連接
連接操作包括條件連接、相等連接和自然連接,操作符爲 。連接本質上是求笛卡爾積,條件連接是隻對符合條件的元組進行連接,相等連接是條件爲相等表達式的連接,自然連接是隻對存在同名字段的元組進行連接。
所有水手預訂的船隻:
除
除並不是基本操作,雖然可以用操作符 表示,但實際上除是由其它操作定義的。考慮兩個關係實例 和 , 有且僅有字段 和 ,而 只有一個字段 。 定義爲滿足如下條件的 的集合,對於 中每個元組 ,在 中都有一個元組 與之對應。
定義爲:
參考資料
Raghu Ramakrishnan, Johannes Gehrke. Database Management Systems (Third Edition)[M]. 北京:清華大學出版社, 2003.