数据库:关系代数

本文介绍了数据库查询的基础——关系代数,包括选择与投影、集合操作、连接和除法。通过实例展示了如何使用这些操作符进行数据检索,如筛选等级大于8的水手、获取所有水手的姓名和等级,以及执行复杂的关系操作,如水手预订的船只的查询。内容参考了Raghu Ramakrishnan和Johannes Gehrke的《Database Management Systems》一书。

目录

有了数据库,还要通过查询来获得数据。SQL是常用的查询语言,但我想用更抽象的查询语言来表达,从思路上去理解而忽略实现细节。下面将介绍关系代数。

数据库实例

在介绍查询语言之前,先定义一个数据库实例:
Sailors(sid: integer, sname: string, rating: interger, age: real)
Boats(bid: integer, bname: string, color: string)
Reserves(sid: integer, bid: integer, day: date)

关系代数

选择与投影

选择和投影均可对单个关系进行操作。选择行的操作符为 σ \sigma σ,投影列的操作符为 π \pi π,两种操作均可以添加检索条件。

等级大于8的水手: σ r a t i n g > 8 ( S a i l o r s ) \sigma{_{rating > 8}}(Sailors) σrating>8(Sailors)
所有水手名字和等级: π s n a m e , r a t i n g ( S a i l o r s ) \pi{_{sname, rating}}(Sailors) πsname,rating(Sailors)

集合操作

每个关系都可以看作实例的集合,因此可以对两个关系进行集合操作。集合操作包括交,并,差以及笛卡尔积,操作符分别为 ⋂ \bigcap ⋃ \bigcup − - × \times ×。两个关系进行集合操作的结果仍为关系。

连接

连接操作包括条件连接、相等连接和自然连接,操作符为 ⋈ \Join 。连接本质上是求笛卡尔积,条件连接是只对符合条件的元组进行连接,相等连接是条件为相等表达式的连接,自然连接是只对存在同名字段的元组进行连接。

所有水手预订的船只: S a i l o r s ⋈ R e s e r v e s ⋈ B o a t s Sailors\Join Reserves\Join Boats SailorsReservesBoats

除并不是基本操作,虽然可以用操作符 ∖ \setminus 表示,但实际上除是由其它操作定义的。考虑两个关系实例 A A A B B B A A A 有且仅有字段 x x x y y y,而 B B B 只有一个字段 y y y A ∖ B A\setminus B AB 定义为满足如下条件的 x x x 的集合,对于 B B B 中每个元组 y y y,在 A A A 中都有一个元组 &lt; x , y &gt; &lt;x, y&gt; <x,y> 与之对应。

A ∖ B A\setminus B AB 定义为: π x ( A ) − π x ( ( π x ( A ) × B ) − A ) \pi{_x}(A) - \pi{_x}((\pi{_x}(A) \times B) - A) πx(A)πx((πx(A)×B)A)

参考资料

Raghu Ramakrishnan, Johannes Gehrke. Database Management Systems (Third Edition)[M]. 北京:清华大学出版社, 2003.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值