目录
有了数据库,还要通过查询来获得数据。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 Sailors⋈Reserves⋈Boats
除
除并不是基本操作,虽然可以用操作符 ∖ \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 A∖B 定义为满足如下条件的 x x x 的集合,对于 B B B 中每个元组 y y y,在 A A A 中都有一个元组 < x , y > <x, y> <x,y> 与之对应。
A
∖
B
A\setminus B
A∖B 定义为:
π
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.
本文介绍了数据库查询的基础——关系代数,包括选择与投影、集合操作、连接和除法。通过实例展示了如何使用这些操作符进行数据检索,如筛选等级大于8的水手、获取所有水手的姓名和等级,以及执行复杂的关系操作,如水手预订的船只的查询。内容参考了Raghu Ramakrishnan和Johannes Gehrke的《Database Management Systems》一书。
3264

被折叠的 条评论
为什么被折叠?



