目录
有了数据库,还要通过查询来获得数据。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.