第5章关系代数主讲人:喻小光Email:40016076@qq.com2主要内容5.1一个数据库模式的例子P1185.2关系代数操作5.3包上的关系操作5.4关系代数的扩展操作5.5关系的约束35.1一个数据库模式的例子Moive(title:string,year:integer,length:integer,incolor:boolean,studioname:string,producerC#:integer)StarsIn(movietitle:string,movieyear:integer,starname:string)MovieStar(name:string,address:string,gender:char,birthdate:date)MoiveExec(name:string,address:srting,CERT#:integer,netWorth:integer)Studio(name:string,address:string,presC#:integer)4关系代数一种抽象的查询语言关系模型数据操纵语言的一种传统的表达方式使用户可以对数据进行查询和修改关系代数表达的运算总是由旧关系构造新关系运算对象---关系运算结果----关系运算符:…….查询(更新):关系代数表达式关系代数基础:代数通常是由一些操作符和一些原子操作数组成5关系代数运算分类:1.传统集合运算:并、交、差2.删除部分数据的运算:选择(删行)、投影(删列、…)3.合并关系元组的运算:连接(两个关系中的元组有选择地组成对)笛卡尔积(两个关系中的元组以所有可能的方式组成对)4.改变关系模式(关系名、属性名):改名61.关系的集合运算关系R和S是元组的集合(不存在重复元组)前提:R和S的模式具有相同的属性集(属性域匹配)且属性顺序相同属性名不同,可以改名。等价的说法:“并相容”---属性数目相同,对应属性取自同一个域。假定,结果关系的模式使用R的名字。7R∪S:R和S的并由R或S中的元组组成RSR∩S=R-(R-S)R∩S:R和S的交由R和S中都存在的元组组成R-S:R和S的差由在R中而不在S中的元组组成8例:R:选修数据结构的学生学号姓名年龄班级010812张明180108010820李力190108S:选修操作系统的学生学号姓名年龄班级010812张明180108010814陈东19010891)查询选修数据结构或操作系统的学生信息R∪S学号姓名年龄班级010812张明180108010820李力190108010814陈东190108102)查询选修数据结构及操作系统的学生信息R∩S学号姓名年龄班级010812张明180108113)查询选修数据结构没选修操作系统的学生信息R-S学号姓名年龄班级010820李力190108岳1:P120例5.1,岳2:P22例2.8,史P122:例4.1122.投影关系R上的投影是从R中选择若干属性A1,A2,A3…An组成的新的关系(去掉重复元组)。记丌A1,A2,A3..An(R)A1,A2,A3…An是R中的属性习惯上按所列出的顺序显示删除一些属性和重复的元组一元运算13例:查询学生的年龄学生学号姓名年龄班级010812张明180108010820李力190108011004童雪180110丌年龄(学生)年龄181914P120例5.2查询所有电影的片名、年份、长度P121图5-3关系的实例Movies(title,year,length,inColor,studioName,producerC#)丌title,year,length(Movies)结果:P121查询所有电影的类型丌inColor(Movies)inColortrue153.选择关系R上的选择运算,即从指定关系中选择满足一定条件C的元组,得到新的关系。结果集的模式与R相同.记:σC(R)一元运算C是一个条件,取值为“true”或“false”。C由逻辑运算符ORANDNOT连接各条件表达式组成。条件表达式形如XθY,θ是比较运算符{=,,,≤,≥,≠}之一;X、Y是属性名,常量、简单函数等16例:查询0108班年龄大于18岁的学生信息学号姓名年龄班级010812张明180108010820李力190108010814陈东190108σ班级=‘0108’AND年龄18(学生)学号姓名年龄班级010820李力190108010814陈东190108查询的实现:依次考察每一个元组,满足条件的放入结果集17对于P121图5-3Movies(title,year,length,genre,studioName,producerC#)例5.3查询片长在100分钟以上的电影的信息σlength=100(Movies)例5.4查询制片公司为Fox的且片长在100分钟以上的电影的信息σlength=100ANDstudioName=‘Fox’(Movies)184.笛卡尔积R和S的笛卡尔积(即乘积)是有序对的集合:由R的元组和S的元组构成更长的元组。有序对的第1个元素是关系R的任何一个元组第2个元素是关系S的任何一个元组.记作:R×S结果关系模式中的属性:由R的属性和S的属性构成。当R和S有公共属性A时,分别用R.A和S.A表示。19R:ABS:BCD122563447891011R×SAR.BS.BCD1225612478129101134256344783491011P122例5.520例:R学号姓名兴趣班0202李一美术0202李一电脑0205吴晓电脑0304石玉美术S兴趣班老师美术张电脑郑21RS学号姓名R.兴趣班S.兴趣班老师0202李一美术美术张0202李一电脑电脑郑0202李一美术电脑郑0202李一电脑美术张0205吴晓电脑美术张0205吴晓电脑电脑郑0304石玉美术美术张0304石玉美术电脑郑笛卡尔积得到的元组不一定有意义R、S不一定有公共属性225.自然连接由R和S在公共属性上相同的元组成对连接构成。(去掉重复的列)假设A1,A2,…An为R和S的公共属性,当且仅当R的元组r和S的元组s在A1,A2,…An每一个属性上都一致时,r和s才能成功地组成一对。记为:RS结果关系模式的属性:R和S的属性的并集。23R:ABS:BCD122563447891011RSABCD12563478公共属性:B去掉重复列P123例5.6在一个连接中,如果一个元组不能和其他关系中的任何一个元组配对,这个元组就被称为悬挂元组24P123例5.7两个公共属性R:ABC123678978S:BCD2342357810ABCD123412356781097810RS25例:R学号姓名兴趣班0202李一美术0202李一电脑0205吴晓电脑0304石玉美术S兴趣班老师美术张电脑郑RS学号姓名兴趣班老师0202李一美术张0202李一电脑郑0205吴晓电脑郑0304石玉美术张公共属性:兴趣班26RS学号姓名兴趣班老师0202李一美术张0202李一电脑郑0205吴晓电脑郑0304石玉美术张公共属性:兴趣班27自然连接由笛卡尔积、选择、投影三个步骤实现的:笛卡尔积:拼接元组选择:选出公共属性上相同的行投影:去掉一组公共属性自然连接符合结合律:(R1R2)R3等价于R1(R2R3)可简记为R1R2R3悬挂元组:在一个连接中,不能和另外关系中的任何元组配对的元组。286.θ连接R和S基于条件C的θ连接,记为:RCS1)RS2)选满足条件C的元组3)重名属性通过附加前缀的办法进行处理结果关系模式的属性:由R的属性和S的属性组成。笛卡尔积、选择θ连接自然连接和θ连接的区别前者要将公共属性合并,后者不合并原因:条件连接时,相同属性的属性值不一定约束成等值关系,而要合并的话,基本前提肯定是要等值.29R:ABC123678978S:BCD2342357810P123例5.8RADSAR.BR.CS.BS.CD123234123235123781067878109787810连接条件与公共属性无关,可以不是等值连接,保留重复的列30P124例5.9RADANDR.BS.BSAR.BR.CS.BS.CD1237810可以是组合条件317.组合操作构成查询关系代数允许任意复杂的表达式,其操作符可以用于任何关系之上,这个关系既可以是某个给定关系,也可以是操作得到的结果关系。可以在子表达式上应用算符来构造新的关系代数表达式,必要的时候用括号把操作数分割开也可以用表达式树来表示这种表达式,虽然这种表达式对机器来说比较难以处理,但是它更易于理解32查询表达式与表达式树P124例5.10查询Movies关系中由Fox制作的至少100分钟的电影的名称(title)和年份(year)丌title,year(σlength=100(Movies)∩σStudioName=“Fox”(Movies))σlength=100丌title,yearσStudioName=“Fox”MoviesMovies∩33P125例5.11将分解为BCNF的关系重新组合Movies(title,year,length,filmType,studioName,starName)分解为2个BCNF:Movies1(title,year,length,filmType,studioName)Movies2(title,year,starName)现在查询:“超过100分钟长的电影中的影星”丌starName(σlength=100(Movies1Movies2))34综合示例学生-课程数据库:Students(Sno,Sname,Ssex,Sage,Sdept)Courses(Cno,Cname,Cpno,Ccredit)Cpno先修课号SC(Sno,Cno,Grade)Students:SnoSnameSsexSageSdept020501李勇男20计算机020502刘雪女19计算机020503王敏女18经管020504张功男19计算机35CnoCnameCpnoCcredit1C语言32DS143OS234DB245SE44SnoCnoGrade020501198020501277020502165020502280020502493Courses:SC:36例:查询选修了2号课程的学生的学号SnoCnoGrade020501198020501277020502165020502280020502493SC:条件目标在?表σCno=‘2’(SC)//选行丌Sno(σCno=‘2’(SC))//选列37例:查询学分大于3的课程号和课程名σCcredit3(Courses)//选行丌Cno,Cname(σCcredit3(Courses))//选列CnoCnameCpnoCcredit1C语言32DS143OS234DB245SE4438例:计算机系没有选课的同学的学号丌Sno(σSdept=‘计算机’(Students))-丌Sno(SC)选修-------SC丌Sno(σSdept=‘计算机’(Students))丌Sno(SC)39Students:SnoSnameSsexSageSdept020501李勇男20计算机020502刘雪女19计算机020503王敏女18经管020504张功男19计算机解1:选修-------SC名字-----Student连接用SnoSnoCnoGrade020501198020501277020502165020502280020502493例:查询选修了课程的学生的名字StudentsSC丌Sname(StudentsSC)40解2:丌Sno,Sname(Students)丌Sno(SC)丌Sno,Sname(Students)丌Sno(SC)丌Sname(丌Sno,Sname(Students)丌Sno(SC))先投影?先连接?先选择?交集?组合成多种解法一般参与运算(尤其连接运算)的数据越少速度越快41