当前位置:文档之家› 关系代数表达式总结-数据库

关系代数表达式总结-数据库

关系代数表达式总结一、并例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)笛卡尔积将垂直的条件展开为水平的条件。

选修课程号为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 SR÷SAa1(c)分析:在关系R中,A可以取四个值{a1,a2,a3,a4}。

其中:a1的象集为{(b1,c2),(b2,c3),(b2,c1)}a2的象集为{(b3,c7),(b2,c3)}a3的象集为{(b4,c6)}a4的象集为{(b6,c6)}S在(B,C)上的投影为{(b1,c2),(b2,c1),(b2,c3)}显然只有a1的象集(B,C)a1包含了S在(B,C)属性组上的投影,所以R÷S={a1}。

例,R表示选修课程,S1、S2、S3表示课程情况3.除法的物理意义(1)除法的含义:R÷S1表示至少选修S1关系中列出课程的学生的学号和姓名;R÷S2表示至少选修S2关系中列出课程的学生的学号和姓名;(2)求选修所有课的同学姓名:(S、SC、C)说明:针对“全部”特征含义的查询要求,如“全部”、“至少”、“包含”等字眼,一般要用除法运算。

4.有时需要构造被除数与除数除操作是同时从行和列角度进行运算(S是R的子集),构造被除数与除数。

用除法的第一种情况例7 检索至少选修课程号为1和2的学生学号。

分析:(1)至少选修课程号为1和2的关系(表)。

(2)考虑用除法来做(3)构造一个临时表K=πCno(σCno=’1’∨Cno=’2’(Course))(4)构造被除数与除数πSno,Cno(SC)÷K用除法的第二种情况例8 查询选修了全部课程的学生的学号。

1) 确定目标属性:学号Sno;2) 确定目标条件:如果学号x被查询到,说明在临时关系πSno,Cno(SC)表中学号x的像集就是所有课程号Cno组成的集合;3) 确定目标关系:根据1)、2)的分析,可以确定该查询是在πsno,cno(SC)和Course两个关系上进行除法运算。

其中,关系SC提供选修信息,而Course提供全部的课程号信息。

4) 画查询树:图3 例题2 的查询树5) 写出关系代数表达式:πsno,cno(SC)÷πcno(Course)。

例9 查询选修全部课程的学生号码和姓名。

(结果需同时满足多个关系的时候用除法)。

πSno,Cno(SC)÷πCno(Course)πSno,Sname(Student)六、综合实例1、设有如下所示的关系:学生表S(S#,SNAME,AGE,SEX)、课程表C(C#,CNAME,TEACHER)和学生选课表SC(S#,C#,GRADE),其中:S#为学号,SNAME 为姓名,AGE为年龄,SEX为性别,C#为课程号,CNAME为课程名,GRADE为成绩, TEACHER为教师。

S#SNAME AGE SEX1李强23男2刘丽22女3张友22男C#CNAME TEACHERK1C语言王华K5数据库原理程军K8编译原理程军(1)检索“程军”老师所授课程的课程号(C#)和课程名(CNAME)。

(2)检索年龄大于21的男学生学号(S#)和姓名(SNAME)。

(3)检索至少选修“程军”老师所授全部课程的学生姓名(SNAME)。

(4)检索“李强”同学不学课程的课程号(C#)。

(5)检索至少选修两门课程的学生学号(S#)。

(6)检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)。

(7)检索选修课程包含“程军”老师所授课程之一的学生学号(S#)。

(8)检索选修课程号为K1和K5的学生学号(S#)。

(9)检索选修全部课程的学生姓名(SNAME)。

(10)检索选修课程包含学号为2的学生所修课程的学生学号(S#)。

(11)检索选修课程名为“C语言”的学生学号(S#)和姓名(SNAME)。

解:本题各个查询语句对应的关系代数表达式表示如下:(1)πC#,CNAME(σTEACHER=‘程军’(C))(2)πS#,SNAME(σAGE>21∧SEX=‘男’(S))(3)πSNAME(Sw v(πS#,C#(SC)÷πC#(σTEACHER=‘程军’(C))))(4)πC#(C)-πC#(σSNAME=‘李强’(S) w v SC)(5)πS#(σ1=4∧2≠5(SC ×SC))(6)πC#,CNAME(Cw v(πS#,C#(SC)÷πS#(S)))(7)πS#(SCw vπC#(σTEACHER=‘程军’(C)))(8)πS#,C#(SC)÷πC#(σC#=’k1’∨C#=’k5’(C))(9)πSNAME(Sw v(πS#,C#(SC)÷πC#(C)))(10)πS#,C#(SC)÷πC#(σS#=’2’(SC))(11)πS#,SNAME(Sw v(πS#(SCw vσCNAME=‘C语言’(C))))2、设有如下所示的关系:学生表S(S#,SNAME,AGE,SEX)、课程表C(C#,CNAME,TEACHER)和学生选课表SC(S#,C#,GRADE),其中:S#为学号,SNAME 为姓名,AGE为年龄,SEX为性别,C#为课程号,CNAME为课程名,GRADE为成绩, TEACHER为教师。

(1)检索LIU老师所授课程的课程号和课程名;(2)检索年龄大于23岁的男学生的学号和姓名;(3)检索学号为S3学生所学课程的课程名与任课教师名;(4)检索至少选修LIU老师所授课程中一门课的女学生姓名;(5)检索WANG同学不学的课程的课程号;(6)检索既选修了LIU老师的课程、又选修了LI老师课程的学生学号;(7)全部学生都选修的课程的课程号与课程名;(8)检索选修课程包含LIU老师所授全部课程的学生学号。

解:本题各个查询语句对应的关系代数表达式表示如下:(1)πC#,CNAME(σTEACHER=‘LIU’(C))(2)πS#,SNAME(σAGE>23∧SEX=‘男’(S))(3)πCNAME,TEACHER(σS#=‘S3’(SCw v C))(4)πSNAME(σSEX=’女’∧TEACHER=‘LIU’(Sw v SCw v C))(5)πC#(C)-πC#(σSNAME=‘WANG’(Sw v SC))(6)π1(σ1=4∧2≠5(SC×SC))(7)πC#,CNAME(Cw v(πS#,C#(SC)÷πS#(S)))(8)πS#,C#(SC)÷πC#(σTEACHER=‘LIU’(C))。

相关主题