1.集合运算符基础
要求:
- 具有相同的目n(即两个关系都有n 个属性)
- 相应的属性取自同一个域
- t是元组变量, t R表示t是R的一个元组
1.1并
符号()
R∪S = { t|t R∨t S }
结果特征:
- 仍为n 目关系,由属于R 或属于S 的元组组成
- 一个元组在并集中只出现一次,运算结果须消除重复值
例如:
1.2差
符号(-)
R-S={t| t R t S}
结果特征:
- 仍然为n目关系,由输入R但不属于S的元组组成
1.3笛卡尔积
符号()
R×S = { | }
1.3.1过程
- R: n目关系,k1个元组
- S: m目关系,k2个元组
R×S运算结果也是一个关系:
列:(n+m)列元组的集合量(R x S是n+m度关系)
- 元组的前n列是关系R的一个元组
- 后m列是关系S的一个元组
行:k1×k2个元组( R×S的基数)
例如:
2.专门的关系运算
2.1表示记号
2.2选择(Selection)
符号()
- F:选择条件,是一个逻辑表达式
- 选择运算是从行的角度进行的运算
2.2.1例题
查询信息系(IS系)全体学生:
结果:
2.3投影(Projection)
符号()
- A:R 中的属性列
- 投影操作主要是从列的角度进行运算
- 但投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)
2.3.1例题
1.查询学生的姓名和所在系。 即求Student关系上学生姓名和 所在系两个属性上的投影。
结果:
2.查询学生关系Student中都有哪些系
结果:(注意,此时自动要消除重复的元组)
2.4连接(Join)
符号()
2.4.1连接也称为θ连接
- 从两个关系的笛卡尔积中选取属性间满足一定条件的元组
- 其本质是笛卡尔积的子集
2.4.2等值连接(equijoin)
- θ为“ = ”的连接运算称为等值连接
2.4.3自然连接(Natural join)
- 两个关系中进行比较的分量必须是相同的属性组
- 在结果中把重复的属性列去掉
2.4.4例题
R | ||
A | B | C |
a1 | b1 | 5 |
a1 | b2 | 6 |
a2 | b3 | 8 |
a2 | b4 | 12 |
S | |
B | E |
b1 | 3 |
b2 | 7 |
b3 | 10 |
b3 | 2 |
b5 | 2 |
:
等值连接:
自然连接:
2.5除(Division)
2.5.1象集
给定一个关系R(X,Z),X和Z为属性组。当t [X]=x时,x在R中 的象集(Images Set)为:
它表示R中属性组X上值为x的诸元组在Z上分量的集合。
注意:可以这样理解,把A看成X可取值a1,a2。B看成Y,有关系Y=F(X),当X取a1时,自变量Y(B)可以取b1,b2。
象集的本质是一次选择运算和一次投影运算
2.5.2除
- 给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。
- R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集
- R与S的除运算得到一个新的关系P(X),P 是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集包含S在Y上投影的集合。
例如:
为了方便理解,我做以下解释:
除操作比较抽象,我们可以把它理解为一种筛选,这中筛选包括“至少”、“全部”。
也可以把它类比成数学中的除法:“被除数 除数 = 结果”,其中先寻找1、要根据什么内容(记为A1)筛选,如上面的例子根据(B、C)来筛选,2、再寻找在哪里面筛选(筛选什么?)(记为A2),上面是在R中筛选。3、如何筛选(记为),筛选A属性中对应的B、C包括全部的S中B、C属性的A属性。上面可以表示为A2 A1=?。
2.5.3例题
(关系都在2.2.1例题)
(一)查询至少选修1号课程和3号课程的学生号码
分析:
1、要根据什么内容筛选?——根据课程号(1号、3号)筛选
2、筛选什么?——筛选学生学号(在关系Student中)
3、如何筛选?——找到 关系(学号,课程号) 关系(课程号={1、3})
step1:首先建立一个临时关系K(K={1,3})
step2:再求: (注意:因为只要学号,所以可以进行投影除学号(Sno)和课程号(Cno)这两个属性)
step3:
(二) 查询选修了2号课程的学生的学号
这个比较简单,可以直接用选择和投影。
(三) 查询至少选修了一门其直接先行课为5号课程的学生姓名
这里需要注意的是,学生姓名和先行课课号没有直接联系
分析:
- 1、要根据什么内容筛选?——根据先行课(5号)筛选
- 2、筛选什么?——筛选学生姓名(在关系Student中)
- 3、如何筛选?——找到 关系(学号,课程号,先行课) 关系(先行课=5),接下来再连接、投影出学生姓名。
但是需要注意的是如何构建 关系(学号,课程号,先行课) 和关系(先行课=5)
step1:首先将Course和SC进行自然连接得到 关系(学号,课程号,成绩,课程名,先行课,学分),再将其投影成 关系(学号,课程号,先行课)
step2:选择Course中先选择 关系(先行课=5)
step3:关系(学号,课程号,先行课) 关系(先行课=5),再投影出学号,将学号与Student自然连接,接着投影出姓名。
解二: