关系代数表达式总结

关系代数表达式总结
一、并
例 1 求选修了课程号为 1 或 2 的课程的学生学号。
分析: 可以先求出选修了课程号为 1 的课程的学生学号, 再求出选修了课程号为 2 的课
程的学生学号, 最后使用并运算的方法求出选修课程号为 1 或 2 的课程的学生学号。 本例也
可以使用或条件来表示。
π Sno( σ Cno=’ 1’ (SC)) ∪π Sno( σ Cno=’ 2’ (SC)) 或π Sno( σ Cno=’ 1’∨ Cno= ’ 2’ (SC))
二、交
例 2 检索至少选修课程号为 2 和 3 的课程的学生学号。
分析:
方法一: 只涉及到一个表,但不能直接用∧(为什么?)
特别注意,本例不能写为:
π Sno( σ Cno=’ 2’∧ Cno=’ 3’ (SC))
因为选择运算为行运算,在同一行中 Cno不可能既为 2,又为 3。
第一步:转换( SC× SC)
笛卡尔积将垂直的条件展开为水平的条件。
SC1 SC2
学号
Sno
课程号
Cno
成绩
Grade
学号
Sno
课程号
Cno
成绩
Grade
95001 1 92 95001 1 92
95001 1 92 95001 2 85
95001 1 92 95001 3 88
95001 1 92 95002 2 90
95001 1 92 95002 3 80
95001 2 85 95001 1 92
95001 2 85 95001 2 85
95001 2 85 95001 3 88
95001 2 85 95002 2 90
95001 2 85 95002 3 80
, , , , , ,
选修课程号为 2 和 3 的学生:
σ 1=4∧ 2=’ 2’∧ 5= ’ 3’ (SC× SC)
最后取出学生的学号:
π 1( σ 1=4∧2=’ 2’∧ 5= ’ 3’ (SC× SC))
方法二: πSno( σ Cno=’ 2’ (SC)) ∩πSno( σ Cno=’ 3’ (SC))
三、差
例 3 将学生信息 ( ‘ 95001’ , ’李勇’, ‘男’ , 20,‘ CS’ ) 从 Student 表删除。
分析: 可以将这行数据看成由一个元组构成的表,将 Student 表与该表进行差运算。
因此,该删除操作可表示为:
Student-{ ‘ 95001’ , ’李勇’, ‘男’ , 20,‘ CS’ }
注意: 但是当查询涉及到否定或全部值时, 上述形式就不能表达了, 就要用到差操作或
除操作。
例 4 求没有选修课程号为 2 的课程的学生学号。
分析: 可以认为是在全部学号中去掉选修课程号为 2 的课程的学生学号, 就得出没有选
修课程号为 2 的学生学号。由于在并、交、差运算中,参加运算的关系要求是兼容的,故应
当先投影,再进行差运算。
π Sno(Student)- π Sno( σ Cno=’ 2’ (SC))
特别注意, 本题不能写为: π Sno( σ Cno≠’ 2’ (SC)) 。因为,选择运算为行运算,并且 SC
表中包含的只是选修了课程的学生学号, 对那些没选任何课程的学生学号, 在 SC中找不到。
根据题意,要查询没有选修课程号为‘ 2’课程的学生学号,显然包括没选任何课程的学生
学号。
当查询涉及到针对“否定”特征含义的查询要求,如“不”、“没有”等字眼,一般要
用差运算表示。
四、自然连接
例 5 检索不学“ 2”号课程的学生姓名与年龄。
分析:首先考虑“差”的问题。先求出全体学生的姓名和年龄,再求出学了” 2”号课
程的学生的姓名和年龄,最后执行两个集合的差操作。
π Sname,Sage(Student)- π Sname,Sage( σ Cno=’ 2’ (Student SC))
例 6 查询至少选修了一门其直接先行课为“ 5”号课程的学生姓名。
分析: (1)根据题目确定要输出的列为: Sname,都在 Student 表中;
( 2) 根据题意, 先行课程名为 “5”, 则选择的条件为 Cpno=’ 5’, 因为 Cpno 在 Course
表中,所以也要用到 Course 表;
( 3)根据 1, 2 两步确定用到的表名集为 {Student,Course};
( 4)因为表名集中两个表,则要用自然连接将它们连接起来,但因为这个两表不存在
共同的列, 不能进行自然连接。 因此要加入中间表, 中间表中应含有能与其它两个表进行自
然连接的公共列,这个表就是 SC。将选择条件 Cpno=‘ 5’ 作用于自然连接后产生的新表上,
并用投影操作选取要输出的 Sno,Cno。
综上,该查询的关系代数表达式为:
πSname( σ Cpno=’ 5’ (Course) SC π Sno,Sname(Stuent))

π Sname( π Sno Cpno=’ 5’ (Course) SC) Stuent))
五、除
1.除法定义中的含义
分析: (1)前提:两个关系 R(X,Y) 和 S(Y,Z) 应该有公共属性列。
( 2)运算结果为 P(X) ,元组来自于 R关系,只包含 X 属性列
( 3) R关系中的哪些元组呢?
对于 T[X] 的象集包含∏ Y(S)
2. 除法运算的步骤
( 1)将被关系 R 的属性分成两个部分,即与除关系相同的属性部分 Y,和与除关系不
同的属性部分 X。
( 2)在除关系中,求 Y的投影,得到目标数据集。
( 3)将被除关系进行分组。 (分组原则是“值”一样的为一组)
( 4)考虑被除关系中已分好的每一元组,如果它的象集包含目标数据集(投影结果) ,
则其值为商。例如, R S
A B C B C D
a1 b1 c2 b1 c2 d1
a2 b3 c7 b2 c1 d1
a3 b4 c6 b2 c3 d2
a1 b2 c3 (b)
a4 b6 c6 R÷S
a2 b2 c3 A
a1 b2 c1 a1
(a) (c)
分析: 在关系 R中, A可以取四个值 {a 1, a2, a3, a4} 。其中:
a 1的象集为 {(b 1, c 2) , (b 2, c 3) , (b 2, c 1)}
a 2的象集为 {(b 3, c 7) , (b 2, c

  • 16
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值