例题来源于教材《数据库系统概论 第五版》
一、关系代数运算概述
(一)运算分类
- 关系代数运算:包括并、差、交、笛卡尔积、投影、选择、连接、除。
- 基本运算:并、差、笛卡尔积、投影、选择 。交、连接、除可以用这 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(姓名)列 。- 最后进行连接运算。连接运算会将前面除运算得到的选修了全部课程的学生号码,与
中对应的学生姓名进行匹配连接,从而得到选修了全部课程的学生号码和姓名信息。
四、除运算应用场景总结
当需要查询在一个关系中,满足另一个关系中所有相关条件的元组时,会用到除运算。比如在学生选课场景中,要查询选修了全部课程的学生信息;在订单 - 商品场景中,查询购买了某店铺所有商品的顾客信息等。即当要找出某个实体集,它与另一个实体集存在完全匹配的关联关系时,就可以考虑使用关系代数中的除运算来实现查询


&spm=1001.2101.3001.5002&articleId=146498568&d=1&t=3&u=e2a94d51301644f4babbf19daa0649a5)
1万+

被折叠的 条评论
为什么被折叠?



