对一个relation的集合做查询操作会产生相应的集合!
下面用一个大学申请系统做示例
下面要做的是利用不同操作选取出我们想要的结果!
select 选择操作
select操作选出满足条件对应的行 格式为
Project操作
project操作用于选出符号条件的列的列 格式为
当我们又要选出指定row和指定column的时候,我们可以对操作符进行组合
例如选出 ID and name of students with gpa>3.7用上述操作符表示为
Duplicate
在关系代数中,duplicate的值是会被删除的,和SQL不同,SQL允许multisets的存在
Cross-Product操作
cross-prudct操作是讲若干个表联合 如有相同的attribute,操作会区分不同table的attribute
利用cross-product进行下图中操作选取满足条件的学生name和gpa
Natural Join操作
natural join 操作是和cross-product类似 但是略有不同
- 组合相同的attribute中相同的value称为一个tuple
- 会删除多余相同的attribute
Cross-Product和Natural Join的关系
Theta Join操作
theta join操作可以看成是对某两个表达式进行cross-product再选出对应的tuple
Union操作
union可以看成是将数据垂直的放在一起,比如我想把stanford和susan(学生的名字)作为两行数据
这时候就需要union操作
Difference操作
difference 相当于从集合中删去某些元素,如下图,从所有的学生中找出没有申请的学生的ID和name
下面这个首先用了difference操作找出ID,然后join back,再对得到的table进行project sName操作。
Intersection操作
intersection操作就是取两个table的共同值,见下图例子
严格来说 左边两边要有同样的schema,这个之后的课会提到如何改进。
并且intersection可以通过其他的操作来实现!
Rename操作
rename有些时候是必须的,对我们非常有帮助!其中rename操作的格式如下
在之前讲的union intersect difference操作,我们希望两边的schema是相同的,rename操作让我们fix这个问题!例子如下
rename还可以用来消除歧义
或
解决重复问题 可以用
Expression Tree