例题来源于教材《数据库系统概论 第五版》
一、关系代数运算概述
(一)运算分类
- 关系代数运算:包括并、差、交、笛卡尔积、投影、选择、连接、除。
- 基本运算:并、差、笛卡尔积、投影、选择 。交、连接、除可以用这 5 种基本运算来表达,引入它们虽不增加语言能力,但能简化表达。
(二)关系代数表达式与典型语言
- 关系代数表达式:关系代数运算经有限次复合后形成的式子。
- 典型关系代数语言:ISBL(Information System Base Language) ,由 IBM United Kingdom 研究中心研制,用于 PRTV(Peterlee Relational Test Vehicle)实验系统。
二、专门运算符
运算符 | 运算名称 | 含义 |
---|---|---|
σ | 选择 | 将满足条件的元组提取出来, |
π | 投影 | 将满足条件的属性提取出来, |
⋈ | 连接 | 将满足条件的元组从笛卡尔积中提取出来, |
÷ | 除 | R÷S,体现 R 元素的象集与 S 的投影的对应关系,![]() |
三、除运算(Division)详解
(一)定义
给定关系 R (X, Y) 和 S (Y, Z),其中 X,Y,Z 为属性组。
R 中的 Y 与 S 中的 Y 可以有不同的属性名,但必须出自相同的域集。
R 与 S 的除运算得到一个新的关系 P (X) ,
P (X) 是 R 关系中满足下列条件的元组在 X 属性列上的投影:
元组在 X 上分量值 x 的象集 Yx包含 S 在 Y 上投影的集合,记作:
(二)例题讲解
例 6:设关系 R、S 分别为下图的 (a) 和 (b),求 R÷S 的结果。
Step1:在关系R中,A可以取四个值{a1,a2,a3,a4}
a1的象集为 {(b1,c2),(b2,c3),(b2,c1)}
a2的象集为 {(b3,c7),(b2,c3)}
a3的象集为 {(b4,c6)}
a4的象集为 {(b6,c6)}
Step2:S 在(B,C)上的投影为
{(b1,c2),(b2,c1),(b2,c3) }
Step3:只有a1的象集包含了 S 在(B,C)属性组上的投影
所以 R÷S ={a1}
(三)除运算步骤
公式
- 第一步:计算
- 即对关系 R 在属性 X(这里假设为 A )上进行投影,得到关系 R 中属性 A 的所有取值集合,这是后续运算的基础部分。
- 第二步:计算
得到 B
- 将第一步得到的投影结果(假设为 A )与关系 S 进行笛卡尔积运算,生成关系 B。这一步扩大了数据规模,将 R 中与 S 相关的属性组合进行了全面的组合。
- 第三步:计算
- 用第二步得到的笛卡尔积结果 B 减去关系 R,得到一个新的关系(图中未单独命名,是计算过程中的中间过渡 ),这一步是在去除那些在 R 中存在的组合,留下多余的部分。
- 第四步:计算
- 对上一步得到的结果在属性 X(A )上进行投影,得到关系 D。这一步是在提取上一步结果中与属性 A 相关的部分。
- 第五步:计算
得到
- 用第一步得到的减去第四步得到的关系 D,最终得到除运算
的结果。在图中最终得出
=a{1},意味着在关系 R 中,只有 a1满足除运算的条件,即其对应的相关属性组合包含了关系 S 中相关属性组合的情况 。
- 用第一步得到的减去第四步得到的关系 D,最终得到除运算
例7.查询至少选修 1 号课程和 3 号课程的学生号码
- 构建临时关系 K
- 题目要求至少选修 1 号课程和 3 号课程,所以建立临时关系
K
,K = {1, 3}
,它表示我们关注的课程集合,即 1 号课程和 3 号课程 。
- 题目要求至少选修 1 号课程和 3 号课程,所以建立临时关系
- 对选课关系 SC 进行投影
- 计算
,这一步是从选课关系
SC
中投影出学生号码和课程号码两列,得到只包含学生选课对应关系的新关系。 - 例如,得到像
200215121
对应课程1
、2
、3
;200215122
对应课程2
、3
这样的信息,这里200215121
的象集为{1, 2, 3}
,200215122
的象集为{2, 3}
。象集表示某个学生选修的所有课程集合。
- 计算
- 进行除运算
- 计算
。除运算的含义是在
中,找出学生号码对应的象集包含临时关系
K
中所有课程(即 1 号和 3 号课程)的学生。 - 对于
200215121
,其象集{1, 2, 3}
包含了K
中的1
和3
;而200215122
的象集{2, 3}
不包含K
中的1
号课程。 - 所以经过除运算
= \{200215121\}\) ,即满足至少选修 1 号课程和 3 号课程这个条件的学生号码是
200215121
。
- 计算
例10.查询选修了全部课程的学生号码和姓名
涉及三个关系:学生关系 Student
(包含学生号码 Sno
和姓名 Sname
)、课程关系 Course
(包含课程号码 Cno
)、学生选课关系 SC
(包含学生号码 Sno
和课程号码 Cno
)。
- 这一步是对学生选课关系
SC
进行投影操作。投影操作的作用是从关系中选取指定的属性列。这里选取Sno
(学生号码)和Cno
(课程号码)列,得到一个新关系,该关系只包含学生选课的对应信息,即哪些学生选了哪些课程。
- 这一步是对学生选课关系
是对课程关系
Course
进行投影操作,选取Cno
(课程号码)列,得到所有课程的课程号码集合。- 然后进行除运算 。除运算的意义是在
中,找出学生号码对应的选课集合(象集)包含
中所有课程号码的学生号码。也就是找出选修了全部课程的学生号码。例如,如果课程关系中有课程号
1
、2
、3
,那么只有某个学生的选课记录中包含1
、2
、3
这三个课程号时,该学生号码才会在除运算结果中。
是对学生关系
Student
进行投影操作,选取Sno
(学生号码)和Sname
(姓名)列 。- 最后进行连接运算。连接运算会将前面除运算得到的选修了全部课程的学生号码,与
中对应的学生姓名进行匹配连接,从而得到选修了全部课程的学生号码和姓名信息。
四、除运算应用场景总结
当需要查询在一个关系中,满足另一个关系中所有相关条件的元组时,会用到除运算。比如在学生选课场景中,要查询选修了全部课程的学生信息;在订单 - 商品场景中,查询购买了某店铺所有商品的顾客信息等。即当要找出某个实体集,它与另一个实体集存在完全匹配的关联关系时,就可以考虑使用关系代数中的除运算来实现查询