关系代数表达式总结-数据库
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关系代数表达式总结
一、并
例1 求选修了课程号为1或2的课程的学生学号。
分析:可以先求出选修了课程号为1的课程的学生学号,再求出选修了课程号为2的课程的学生学号,最后使用并运算的方法求出选修课程号为1或2的课程的学生学号。本
例也可以使用或条件来表示。
n Sno ( o Cno二’1' (SC)) U n Sno ( o Cno二'2 ' (SC))或n Sno ( oCno= ' 1 'V Cno= ' 2' (SC))
例2检索至少选修课程号为 2和3的课程的学生学号。
分析:
方法一:只涉及到一个表,但不能直接用人(为什么?)
特别注意,本例不能写为:
n Sno( oCno= ' 2' A Cno=' 3' (SC))
因为选择运算为行运算,在同一行中Cno不可能既为2,又为3。
第一步:转换(SC X SC)
笛卡尔积将垂直的条件展开为水平的条件。
选修课程号为2和3的学生:
(71=4 人2= ' 2'人5= ' 3' (SC X SC)
最后取出学生的学号:
n i( 01=4 人2= ' 2 '人5= ' 3' (SC X SC))
方法二:n Sno( oCno= ' 2' (SC)) Qn no ( o Cno= ' 3' (SC))
三、差
例3将学生信息(‘ 95001 ','李勇’,‘男’,20,‘ CS')从Student表删除。
分析:可以将这行数据看成由一个元组构成的表,将Student表与该表进行差运算。
因此,该删除操作可表示为:
Student-{ '95001 '李勇',’男',20 , ‘ CS' }
注意:但是当查询涉及到否定或全部值时,上述形式就不能表达了,就要用到差操作或除操作。
例4求没有选修课程号为 2的课程的学生学号。
分析:可以认为是在全部学号中去掉选修课程号为2的课程的学生学号,就得出没有
选修课程号为 2的学生学号。由于在并、交、差运算中,参加运算的关系要求是兼容的,故应当先投影,再进行差运算。
n Sno (Stude nt)- n Sno ( o Cno=' 2' (SC))
特别注意,本题不能写为:n Sno ( o Cno ±2 ' (SC))。因为,选择运算为行运算,并且SC 表中包含的只是选修了课程的学生学号,对那些没选任何课程的学生学号,在SC中找不到。
根据题意,要查询没有选修课程号为’2'课程的学生学号,显然包括没选任何课程的学生
学号。
当查询涉及到针对“否定”特征含义的查询要求,如“不”、“没有”等字眼,一般要
用差运算表示。
四、自然连接
例5检索不学“ 2 ”号课程的学生姓名与年龄。
分析:首先考虑“差”的问题。先求出全体学生的姓名和年龄,再求出学了” 2 ”号课
程的学生的姓名和年龄,最后执行两个集合的差操作。
n sn ame,Sage (Stude nt)- n 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 。
综上,该查询的关系代数表达式为:
(Course)SC) A : 1 Stuent))
五、除
1 .除法定义中的含义
分析:(1 )前提:两个关系 R(X,Y)和S(Y,Z)应该有公共属性列。
n Sname ( cjCpno 二’5 (Course) SC
n Sno,Sn ame (Stue nt))
n Sname ( n Sno ( j Cpno= ' 5
(2) 运算结果为P(X),元组来自于R 关系,只包含X 属性列 (3) R 关系中的哪些元组呢?
对于T[X]的象集包含口 Y (S) 2•除法运算的步骤
(1 )将被关系R 的属性分成两个部分,即与除关系相同的属性部分 Y ,和与除关系不
同的属性部分X 。
(2) 在除关系中,求 Y 的投影,得到目标数据集。
(3 )将被除关系进行分组。(分组原则是“值”一样的为一组)
(4) 考虑被除关系中已分好的每一元组,如果它的象集包含目标数据集(投影结果)
S
S1
R (a)
分析:在关系R 中,A 可以取四个值{a 1,
a 1的象集为
(C )
a 2, a 3, a 4}。其中:
{(b 1, C 2), (b 2, C 3), (b 2, c i )}
a 2的象集为 {(
b 3. C 7), (b 2, C 3)}
a 3的象集为 {(
b 4,
c 6)}
a 4的象集为 S 在(B , C)上的投影为 显然只有a 1的象集(B , C ) {(
b 6
, C 6)}
{(b1 , C2), (b2 , C1) , (b2 , C 3)}
a1包含了 5在(B , C )属性组上的投影,所以
R -S={a 1}o
例,R 表示选修课程,
S1、 S2、S3表示课程情况