关系代数表达式总结-数据库
- 格式:docx
- 大小:83.45 KB
- 文档页数:9
关系代数操作复习实例:职工(职工编号,职工姓名,年龄,性别);E(ENO ,ENAME,AGE,SEX);社团(社团编号,社团名称);C(CNO ,CNAME);参加(职工编号,社团编号,参加时间);EC(ENO ,CNO,TIME);说明:(1)加粗的为主键;(2)参加表中的职工编号参照职工表中的职工编号,参加表中的社团编号参照社团表中的社团编号写出如下检索关系代数表达式:(1)检索年龄在30到50岁之间的职工编号和职工姓名AGE '30'AGE '50',((E))ENO ENAME σ>=∧<=∏(2)检索年龄在30到50岁之间的职工参加的社团名称AGE '30'AGE '50'((E C EC))CNAME σ>=∧<=∞∞∏(3)检索参加‘妇女之家’的职工编号''(())CNAME ENO C EC σ=∞∏妇女之家(4)检索参加‘书法社’或‘篮球队’的职工姓名''''AME ((E C EC))CNAME CNAME EN σσ=∨=∞∞∏书法社篮球队(5)检索既参加‘书法社’又参加‘篮球队’的职工姓名''''AME AME ((E C EC))((E C EC))CNAME CNAME EN EN σσ==∞∞∞∞∏∏ 书法社篮球队注意:不能将结果写成:''''AME ((E C EC))CNAME CNAME EN σσ=∧=∞∞∏书法社篮球队不能使指定的社团名称既是‘书法社’又是‘篮球队’。
假设社团表的信息如下:‘篮球队’,从表格中可以看出一个名称对应一个编号!(6)检索‘2014’年参加社团的职工信息'2014'NO,ENAME,AGE,SEX ((C EC))TIME E σ=∞∏(7)检索‘王小毛’参加的社团名称ENAME ''CNAME ((E C EC))σ=∞∞∏王小毛(8)检索没有参加任何社团的职工编号ENO ENO (E)-(EC)∏∏(9)检索没有参加‘篮球队’的职工姓名CNAME=''ENAME ENAME (E)-(E C EC )σ∞∞∏∏篮球队()。
数据库关系代数表达式学习关系代数是关系数据库系统查询语言的理论基础一、关系代数的9种操作:关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。
五个基本操作:并(∪)、差(-)、笛卡尔积(×)、投影(σ)、选择(π)四个组合操作:交(∩)、联接(等值联接)、自然联接(R S)、除法(÷)注2:等值连接表示先做笛卡尔积(×)之后,对相应列进行选择或等值关联后的结果(仅筛选行、不筛选列) 注2:自然连接表示两个关系中若有相同名称的属性,则自动作为关联条件,且仅列出一列二、关系代数表达式:由关系代数运算经有限次复合而成的式子称为关系代数表达式。
这种表达式的运算结果仍然是一个关系。
可以用关系代数表达式表示对数据库的查询和更新操作。
三、举例说明:设教学数据库中有3个关系:学生关系S(SNO, SNAME,AGE,SEX)学习关系SC(SNO,CNO,GRADE)课程关系C(CNO,CNAME,TEACHER)(1) 检索学习课程号为C2的学生学号与成绩------------------------------------SELECT SNO,GRADEFROM SCWHERE CNO='C2'------------------------------------π SNO, GRADE (σ CNO='C2' (SC))************************************(2) 检索学习课程号为C2的学生学号与姓名------------------------------------SELECT SC.SNO,S.SNAMEFROM SC,SWHERE SC.SNO=S.SNOAND O='C2'------------------------------------π SNO,SNAME (σ CNO='C2' (S SC))此查询涉及S和SC,先进行自然连接,然后再执行选择投影操作。
(1)检索“程军”老师所授课程的课程号(C#)和课程名(CNAME)答:∏课程号,课程名(σTEACHER=“程军”(C))
(2)检索年龄大于21的男学生学号(S#)和姓名(SNAME)。
答:∏学号,姓名(σ性别=“男”∧年龄>21(S))
(3)检索至少选修“程军”老师所授全部课程的学生姓名(SNAME)。
答:∏姓名(σTEACHER=“程军”(C)∞SC∞∏学号,姓名(S))
(4)检索“李强”同学不学课程的课程号(C#)。
答:∏课程号(C)-∏课程号(σ姓名=“李强”( SC ∞S))
(5)检索至少选修两门课程的学生学号(S#)。
答:∏学号(σ课程号=“K1”∨课程号=“K5”(SCхC))
(6)检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)。
答:∏学号,课程号,课程名(SC∞C)÷∏学号(S)
(7)检索选修课程包括“程军”老师所授课程之一的学生学号(S#)。
答:∏学号,课程号(SC)÷∏课程号(σTEACHER=“程军”(C))
(8)检索选修课程号为K1和K5的学生学号(S#)。
答:σ课程名=k1∨课程号=k5(S)
(9)检索选修全部课程的学生姓名(SNAME)。
答:∏姓名(S∞(∏课程号,学号(SC)÷∏课程号(C)))
(10)检索选修课程包含学号为2的学生所修课程的学生学号(S#)。
答:∏学号(C∞(σ学号=“2”(SC))
(11)检索选修课程名为“C语言”的学生学号(S#)和姓名(SNAME)。
答:∏学号,姓名(S∞SC∞(σ课程名=“C语言”(C)))。
关系代数表达式总结一、并例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选修课程号为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))。
关系代数表达式总结一、并例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' (StudentSC))例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) SCn 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) 考虑被除关系中已分好的每一元组,如果它的象集包含目标数据集(投影结果)SS1R (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表示课程情况3. 除法的物理意义(1)除法的含义:R+S1表示至少选修S1关系中列出课程的学生的学号和姓名;R+S2表示至少选修S2关系中列出课程的学生的学号和姓名;(2)求选修所有课的同学姓名:(S、SC、C)说明:针对“全部”特征含义的查询要求,如“全部”、“至少”、“包含”等字眼, 般要用除法运算。
4. 有时需要构造被除数与除数除操作是同时从行和列角度进行运算(S是R的子集),构造被除数与除数。
用除法的第一种情况例7 检索至少选修课程号为 1和2的学生学号。
分析:(1)至少选修课程号为 1和2的关系(表)。
(2 )考虑用除法来做(3 )构造一个临时表K= n Cno (o Cno二'1 'V Cno二'2 ' (COU「Se))(4)构造被除数与除数n Sno,Cno (SC) -K用除法的第二种情况例8查询选修了全部课程的学生的学号。
1) 确定目标属性:学号 Sno ;2) 确定目标条件:如果学号 X被查询到,说明在临时关系n Sno,Cno (SC)表中学号X的像集就是所有课程号Cno组成的集合;3) 确定目标关系:根据1)、2)的分析,可以确定该查询是在n sno,cno (SC)和Course两个关系上进行除法运算。
其中,关系SC提供选修信息,而Course提供全部的课程号信息。
4) 画查询树:■八兀sno. cno 兀cno/ \sc course图3例题2的查询树5) 写出关系代数表达式:n sno,cno (SC) —n no (Course) o例9查询选修全部课程的学生号码和姓名。
(结果需同时满足多个关系的时候用除法) on Sn o,C no (SC) -n Cno (Course) n Sno,Sn ame (Stude nt)六、综合实例1、设有如下所示的关系:学生表S(S#,SNAME,AGE,SEX)、课程表C(C#,CNAME,TEACHER) 和学生选课表 SC(S#,C#,GRADE),其中:S# 为学号,SNAME 为姓名,AGE为年龄,SEX为性别,C#为课程号,CNAME 为课程名,GRADE为成绩, TEACHER为教师。
试用关系代数表达式表示下列查询语句:(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 ) n C#,CNAME ( OTEACHER= ‘程军' (C))(2)n S#,SNAME ( 0AGE>21 人SEX= ‘男' (S))(3)n SNAME (Swv ( n s#,c# (SC) *n C#( OTEACHER=‘程军’(C))))(4) n c#(C)- n c#( OSNAME='李强'(S)wv SC)(5)n S#( 6=4 人2 =5(SC X SC))(6)n C#,CNAME (Cwv ( n s#,C# (SC) *n s#(S)))(7) n s#(SCwv n c#( OTEACHER='程军'(C)))(8)n S#,C# ( SC ) *n c#((rc#= ' k1 'v c#= ' k5' (C))(9)n SNAME ( Swv ( n s#,c# (SC ) *n c#(C)))(10) n S#,C# ( SC) *n c#( OS#= ' 2' (SC))(11 ) n S#,SNAME (Swv ( n S#(SCwvo 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老师所授全部课程的学生学号。