【数据库】关系代数(除运算详解)

例题来源于教材《数据库系统概论 第五版》

一、关系代数运算概述

(一)运算分类

  1. 关系代数运算:包括并、差、交、笛卡尔积、投影、选择、连接、除。
  2. 基本运算:并、差、笛卡尔积、投影、选择 。交、连接、除可以用这 5 种基本运算来表达,引入它们虽不增加语言能力,但能简化表达。

(二)关系代数表达式与典型语言

  1. 关系代数表达式:关系代数运算经有限次复合后形成的式子。
  2. 典型关系代数语言: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}

(三)除运算步骤

公式

  1. 第一步:计算 
    • 即对关系 R 在属性 X(这里假设为 A )上进行投影,得到关系 R 中属性 A 的所有取值集合,这是后续运算的基础部分。
  2. 第二步:计算 得到 B
    • 将第一步得到的投影结果(假设为 A )与关系 S 进行笛卡尔积运算,生成关系 B。这一步扩大了数据规模,将 R 中与 S 相关的属性组合进行了全面的组合。
  3. 第三步:计算
    • 用第二步得到的笛卡尔积结果 B 减去关系 R,得到一个新的关系(图中未单独命名,是计算过程中的中间过渡 ),这一步是在去除那些在 R 中存在的组合,留下多余的部分。
  4. 第四步:计算
    • 对上一步得到的结果在属性 X(A )上进行投影,得到关系 D。这一步是在提取上一步结果中与属性 A 相关的部分。
  5. 第五步:计算 得到 
    • 用第一步得到的减去第四步得到的关系 D,最终得到除运算的结果。在图中最终得出 =a{1},意味着在关系 R 中,只有 a1满足除运算的条件,即其对应的相关属性组合包含了关系 S 中相关属性组合的情况 。

例7.查询至少选修 1 号课程和 3 号课程的学生号码

  1. 构建临时关系 K
    • 题目要求至少选修 1 号课程和 3 号课程,所以建立临时关系 KK = {1, 3} ,它表示我们关注的课程集合,即 1 号课程和 3 号课程 。
  2. 对选课关系 SC 进行投影
    • 计算,这一步是从选课关系 SC 中投影出学生号码和课程号码两列,得到只包含学生选课对应关系的新关系。
    • 例如,得到像 200215121 对应课程 123 ;200215122 对应课程 23 这样的信息,这里 200215121 的象集为 {1, 2, 3} ,200215122 的象集为 {2, 3} 。象集表示某个学生选修的所有课程集合。
  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(课程号码)列,得到所有课程的课程号码集合。
    • 然后进行除运算 。除运算的意义是在中,找出学生号码对应的选课集合(象集)包含 中所有课程号码的学生号码。也就是找出选修了全部课程的学生号码。例如,如果课程关系中有课程号 123 ,那么只有某个学生的选课记录中包含 123 这三个课程号时,该学生号码才会在除运算结果中。
    •  是对学生关系 Student 进行投影操作,选取 Sno(学生号码)和 Sname(姓名)列 。
    • 最后进行连接运算。连接运算会将前面除运算得到的选修了全部课程的学生号码,与 中对应的学生姓名进行匹配连接,从而得到选修了全部课程的学生号码和姓名信息。

四、除运算应用场景总结

当需要查询在一个关系中,满足另一个关系中所有相关条件的元组时,会用到除运算。比如在学生选课场景中,要查询选修了全部课程的学生信息;在订单 - 商品场景中,查询购买了某店铺所有商品的顾客信息等。即当要找出某个实体集,它与另一个实体集存在完全匹配的关联关系时,就可以考虑使用关系代数中的除运算来实现查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值