专门的关系运算
- 选择 σ
- 投影 π
- 连接
- 求商÷
选择运算
设有一个学生—课程数据库。学生关系包括学号、姓名、性别、年龄和院系五个属性,课程关系包括课程号、课程名和学分三个属性,选修关系包括学号、课程号和成绩三个属性。
关系模式表示如下:
student(sno,sname,sex,age,dept)
course(cno,cname,credit)
sc(sno,cno,grade)
例题2.5 查询计算机系全体学生的信息。由student关系中满足dept=“计算机系”这一条件的元组组成(即为选择运算)。
结果如表2.17所示。
由此可见,选择运算实际上是从关系R中选取使逻辑表达式值为真的元组。这是从行的角度进行的运算。如图2.2所示。
图2.2 选择操作
选择又称为限制(Restriction)。它是在关系R中选择满足给定条件的诸元组,记作:
其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。
例题2.6
查询年龄小于20岁的学生。
σAge < 20(student) 或 σ4 < 20(student)
结果如表2.18所示。
投影运算
例题2.7
查询学生的学号和姓名。由student关系中的学号属性列和姓名属性
列组成的新关系(即为投影运算)。
结果如表2.19所示。
说明:形成的新关系不仅取消了原关系中的某些列,而且还可能取 消某些元组,因为取消了某些属性列后,就可能出现重复行,应取 消这些完全相同的行。
由此可见,投影操作是从列的角度进行的运算。如图2.3所示。
关系R上的投影是从R中选择出若干属性列组成新的关系。记作:
其中A为R中的属性列。
例题2.8
查询学生关系student中都有哪些院系,即查询关系student在院系属性上的投影。
πDept(student)
结果如表2.20所示。
说明:student关系原来有四个元组,而投影结果取消了重复的计算机系元组,因此只有两个元组。
连接运算
连接也称为θ连接。它是从两个关系的笛卡儿积中选取属性间满足一定条件的元组。记作:
其中A和B分别为R和S上度数相等且可比的属性组。θ是比较运算符。连接运算从R和S的广义笛卡尔积R S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系θ的元组。
连接运算中有两种最为重要也最为常用的连接,一种是等值连接 (Equal-Join),一种是自然连接(Natural-Join)。
θ为“=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组,即等值连接为:
自然连接(Natural-join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。即若R和S具有相同的属性组B,U为R和S的全体属性集合,则自然连接可记作:
一般的连接操作是从行的角度进行运算。但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。如图2.4所示。
图2.4 连接操作
外连接 R S :如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(NULL)
A |
B |
C |
E |
a1 |
b1 |
5 |
3 |
a1 |
b2 |
6 |
7 |
a2 |
b3 |
8 |
10 |
a2 |
b3 |
8 |
2 |
a2 |
b4 |
12 |
NULL |
NULL |
b5 |
NULL |
2 |
左外连接 R S :如果只把左边关系R中要舍弃的元组保留就叫做左外连接。
A |
B |
C |
E |
a1 |
b1 |
5 |
3 |
a1 |
b2 |
6 |
7 |
a2 |
b3 |
8 |
10 |
a2 |
b3 |
8 |
2 |
a2 |
b4 |
12 |
NULL |
右外连接 R S :如果只把右边关系S中要舍弃的元组保留就叫做右外连接
A |
B |
C |
E |
a1 |
b1 |
5 |
3 |
a1 |
b2 |
6 |
7 |
a2 |
b3 |
8 |
10 |
a2 |
b3 |
8 |
2 |
NULL |
b5 |
NULL |
2 |
除运算
为叙述上的方便先引入几个概念。
(1)元组的分量
(2)象集(Image Set)
(1)元组的分量
- 设关系模式为R(A1,A2,……An),它的一个关系为R
- t ∈R 表示 t 是R 的一个元组
- t[Ai] 则表示元组t中相应于属性Ai的一个分量。
元组的分量举例1
元组的分量举例2
如:关系模式S
t :(99058,庞兵,男,1979 ,……)
t[SNAME]=庞兵,表示元组t 在姓名SNAME上的分量为“庞兵”。
属性列/域列 举例
(2)象集Zx(Images Set)
给定一个关系R(X,Z),X和Z为属性组。
当 t[X]=x时,x在R 中的象集(Images Set)为:
Zx = { t [Z] | t R,t [X] = x }
它表示R中属性组X上值为x的诸元组在Z上分量的集合。
象集举例1
- x1在R中的象集
- Zx1 ={Z1,Z2,Z3},
- x2在R中的象集
- Zx2 ={Z2,Z3},
- x3在R中的象集
- Zx3={Z1,Z3}
象集举例2
象集举例3
例如:学生-课程数据库中的选修关系S-C
SNO |
CNO |
Grade |
99001 |
001 |
85 |
99001 |
003 |
90 |
99002 |
001 |
75 |
99002 |
002 |
80 |
t [X]=t[SNO]=x=99001
- 象集:Zx={ (001,85),(003,90) }
t [X]=t [CNO]=x=001
- 象集:Zx={ (99001,85),(99002,75) }
象集举例4
给定关系R(X,Y)和S(Y,Z),其中X、Y、Z为属性组。R中的Y与S中 的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运 算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性 列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。
记作:
其中Yx为x在R中的象集,x =tr[X]
除操作是同时从行和列角度进行运算。如图2.6所示。
因此,求R÷S的操作步骤如下:
(1)将R中属性分为两个集合X和Y,
R(X,Y),其中Y就是S中的前半部分
属性的集合,S(Y,Z)。
(2)若X的某个值x的象集Yx
Yx={t[Y]∣t∈R∧t[X]=x} 包含S表中t[Y]的所有元组,则将x放入结果集中。
例:R÷S
如图2.7所示。设关系R、S分别为图2.7中的(a)和(b), R÷S的结果为图2.7(c)。
在关系R中,A可以取四个值{a1,a2,a3,a4 }, 其中:
a1的象集为{(b1,c2),(b2,c3),(b2,c1)}
a2的象集为{(b3,c7),(b2,c3)}
a3的象集为{ (b4,c6) }
a4的象集为{(b6,c6)} S在(B,C)上的投影为{(b1,c2),(b2,c1),(b2,c3)}
显然只有a1的象集(B,C)包含了S在(B,C)属性组上的投影,所以 以R÷S={a1}。
例题2.9 已知学生选课关系R,课程表S,要找出选课关系中选修所有课程的学生的学号。指定的课程号和对应课程名构成的关系记为S,则该问题可以用R÷S表示。如表2.21、表2.22、表2.23所示。
希望对你有帮助!加油!
若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!