《数据库原理第二部分关系数据库课件》由会员分享,可在线阅读,更多相关《数据库原理第二部分关系数据库课件(63页珍藏版)》请在金锄头文库上搜索。
1、数据库原理第二部分关系数据库课件Stillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望本次课学习内容本次课学习内容v关系代数关系运算(选择、投影、连接,除运算除运算)v*关系演算是以数理逻辑中的谓词演算为基础的。可分为:元组关系演算语言(get,put等6条语句)域关系演算语言QBE一、关系代数一、关系代数v1、除运算v2、除运算示例v3、除运算练习1、除运算、除运算(Division,亦称商),亦称商)v用途用途:除法运算同时从行和列的角度进行运算,在表达某些查询时有用,适合于包含“全部
2、”之类的短语的查询,例如“查询已注册选修了所有课程的学生名字”。v定义:定义:给定关系R(X,Y),S(Y,Z),X,Y,Z为属性列,关系R和关系S中的Y出自相同域集,则:RS=trX|trRy(S)Yx其中,Yx为x在R中的象集,x=trX。象集象集Z Zx x 给定一个X和关系R(X,Z), Z为属性组。 当tX=x时,x在R中的象集象集(Images Set)为: Z Zx x=tZ|t R,tX=x 它表示R中属性组X上值为x的诸元组在Z上分量的集合vx1在在R中的象集中的象集 Zx1 =Z1,Z2,Z3,vx2在在R中的象集中的象集 Zx2 =Z2,Z3,vx3在在R中的象集中的象集
3、 Zx3=Z1,Z3例1:设关系R、S分别为下图的(a)和(b),RS的结果为图(c) 2、除运算示例分析分析v在关系R中,A可以取四个值a1,a2,a3,a4a1的象集为 (b1,c2),(b2,c3),(b2,c1)a2的象集为 (b3,c7),(b2,c3)a3的象集为 (b4,c6)a4的象集为 (b6,c6)vS在(B,C)上的投影为 (b1,c2),(b2,c1),(b2,c3) v只有a1的象集包含了S在(B,C)属性组上的投影 所以RS =a1 写出RS=ABCDa1246a3823a1235a4778CD3546ABa12RSRS例例2 2:有关系:有关系A A、B1B1、B
4、2B2和和B3B3,请分别计算,请分别计算A/B1A/B1、 A/B2 A/B2及及A/B3A/B3。分析:在关系中,sno可以取四个值s1,s2,s3,s4s1的象集为p1,p2,p3,p4s2的象集为p1,p2s3的象集为p2s4的象集为p2,p4例例3 3:有关系:有关系R R、S1S1、S2S2和和S3S3,请分别计算,请分别计算R/S1R/S1、R/S2R/S2及及R/S3R/S3。分析:在R关系中,sid可以取四个值s1,s2,s3,s4s1的象集为p1,p2,p3,p4,s2的象集为p1,p2s3的象集为p2,s4的象集为p2,p4例4:查询至少选修1号课程和3号课程的学生号码解
5、题思路:首先建立一个临时关系K,然后求Sno,CnoSno,Cno(SC)(SC)K K200215121象集1,2,3200215122象集2,3 K=1,3 于是:Sno,Cno(SC)K=200215121 Cno13SnoCno20021512112002151212200215121320021512222002151223v关系除法运算的步骤:关系除法运算的步骤:1)将被除关系属性分为象集属性和结果属性2)对象集属性进行投影目标数据集3)将被除关系分组:结果属性值一样的元组分为一组结果属性值一样的元组分为一组4)找出结果集3、除运算练习、除运算练习1、已知关系r、s、w如图所示,计
6、算T=(rs)w)Sr r关系关系s s关系关系w w关系关系 ABC1b22a21b13a3ABC2b13b13b23a2BCa2b1解:解:T= T= ABC2b13b13b23a2 2、检索学习全部课程的学生学号3、检索学习全部课程的学生学号和姓名4、检索所学课程包含学生S3所学课程的学生学号 Sno,Cno(SC)Cno(Course)Sno,Cno(SC)Cno(Course)Sno,Sname(Student)或:Sno,Sname(StudentSno,Cno(SC)Cno(Course)Sno,Cno(SC) Cno( sno=S3(SC)关系代数小结关系代数小结v传统的集合运
7、算并、差、交、笛卡尔积v专门的关系运算选择、投影、连接、除v5种基本运算并、差、笛卡尔积、投影、选择二、关系演算二、关系演算v关系演算是以数理逻辑中的谓词演算为基础的,通过谓词形式来表示查询表达式。v根据谓词变元的不同,可将关系演算分为元组关系演算和域关系演算。前者以元组为变量,简称元组演算;后者以域为变量,简称域演算。v元组关系演算Tuple Relational Calculus ,简称TRC元组关系演算语言ALPHA元组关系表达式v域关系运算Domain Relational Calculus ,简称DRC域关系演算语言QUE1 1、元组关系演算、元组关系演算v元组关系演算是以元组变量作
8、为谓词变元的基本对象。v元组关系演算语言的典型代表是E.F.Codd提出的ALPHA语言,这种语言虽然没有实际实现,但较有名气,INGRES关系数据库上使用的QUEL语言,就是在ALPHA语言的基础上研制的。v这里主要介绍ALPHA语言。ALPHA语言语言v基本格式是: ():操作符有GET、PUT、HOLD、UPDATE、DELETE,DROP等6条语句。工工作作空空间间是指内存空间,通通常常用用W W表表示示,也可以用别的字母表示。工作空间是用户与系统的通信区。目目标标表表用于指定操作(如查询、更新等)出来的结果,它可以是关系名或属性名,一条语句可以同时对多个关系或多个属性进行操作。只有满
9、足操作条件的元组才能进行,操作操作条件可以为空。除此之外,还可以在基本格式上加上排序要求,定额要求等。1)简单查询)简单查询v下面以学生课程数据库(P56)为例,说明ALPHA语言的使用。例1:查询所有学生的数据GETW(Student)GET语句的作用是把数据库中的数据读入内存空间W,目标表为学生关系S,代表查询出来的结果,即所有的学生。冒号后面的操作条件缺省,表示无条件查询。例2:查询所有被选修的课程号码。GETW(SC.Cno)目标表为选课关系SC中的属性CNO,代表所有被选修的课程号码,查询结果自动消去重复行。v由冒号后面的逻辑表达式给出查询条件,在表达式中可以使用如下三类运算符: 比
10、较运算符:,=等于,; 逻辑运算符:(与),(或),(非) 表示执行次序的括号:()v其中,比较运算符的优先级高于逻辑运算符,可以使用()改变它们的优先级。2)条件查询)条件查询例1:查询所有男学生的姓名。GETW(Student.Sname):Student.Ssex=男例2:查询信息系(IS)中年龄小于20岁的学生的学号和年龄GETW(Student.Sno,Student.Sage):Student.Sdept=ISStudent.Sage20例3:查询信息系(IS)或计算机系(CS)的男学生GETW(Student):(Student.Sdept=ISVStudent.Sdept=CS
11、)Student.Ssex=男3)排序检索)排序检索例1:查询S3同学所选课程号及成绩,并按成绩降序排列。GETW(SC.CNO,SC.SCORE):SC.SNO=S3DOWNSC.SCORE例2:查询计算机科学系(CS)学生,按年龄升序排序GETW(Student):Student.Sdept=CSupStudent.SageDOWN表示降序,后面紧跟排序的属性名。升序排列时使用UP。4)限额检索)限额检索例1:查询查询一名男同学。GETW(1)(Student):Student.Ssex=男例2:查询一名男同学的教师号和姓名,并使他的年龄最小。GETW(1)(Student):Studen
12、t.Ssex=男upStudent.Sage所谓的定额查询就是通过在W后面的括号中加上定额数量,限定查询出元组的个数。这里(1)表示查询结果中男同学的个数,取出学生表中第一个男同学的学号和姓名。5)带元组变量的查询)带元组变量的查询v元组关系演算就是以元组变量作为谓词变元的基本对象,元组变量是在所定义的关系范围内变化,所以也称作范围变量Range Variable,一个关系可以设多个元组变量。例1:查询S3同学所选课程号。RANGE SC XGET W (X.CNO):X.SNO=S3使用RANGE来说明元组变量,X为关系SC上的元组变量。如果关系的名字很长,使用起来不方便,这时可以设一个名字
13、较短的元组变量来代替关系名,简化关系名,使操作更加方便。例2:查询所有男学生的姓名。RANGEStudentXGETW(X.Sname):X.Ssex=男例3:查询信息系(IS)中年龄小于20岁的学生的学号和年龄RANGEStudentXGETW(X.Sno,X.Sage):X.Sdept=ISX.Sage,18StudentSnoSnameSsexSageSdeptP.赵亦赵亦女女P.赵亦赵亦18例3:查询年龄大于18岁或者女学生的姓名。v在QBE中,表示两个条件的“或”,要把两个条件写在不同行上,且必须使用不同的示例元素。StudentSnoSnameSsexSageSdeptP.赵亦赵亦
14、女女P.李亦李亦18例4:查询选修C1号课程学生的姓名。本查询涉及两个关系:Student和SC,这两个关系具有公共的属性Sno,Sno作为连接属性,把具有相同的SNO值的两个关系连接起来,Sno在两个表中的值要相同。StudentSnoSnameSsexSageSdeptS1P.赵亦赵亦SCSnoCnoGradeS1C1例5:查询未选修C1号课程学生的姓名。v查询条件中的“未选修”需使用逻辑非来表示。QBE中的逻辑非运算符为,填写在关系名下方。v如果S1同学选修C1号课程的情况为假,则符合查询的条件,显示S1同学的学号,然后再查询其他同学。StudentSnoSnameSsexSageSde
15、ptS1P.赵亦赵亦SCSnoCnoGradeS1C13)排序查询)排序查询例1:查询全体女同学的学号和姓名,要求查询结果按年龄降序排列。v对查询结果按照某个属性值升序排列时,则在相应的属性下方填入“AO”,降序排列时,填入“DO”。v如果按照多个属性值同时排序,则用“AO(i)”或“DO(i)”表示,其中I为排序的优先级,I值越小,优先级越高。StudentSnoSnameSsexSageSdeptP.95001P.赵亦赵亦DOv例2:查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。StudentSnoSnameSsexSageSdeptP.李勇男DO(2).A
16、O(1).4)使用聚集函数)使用聚集函数v同ALPHA语言类似,QBE语言也提供了一些有关运算的标准函数,以方便用户。函数名称功能AVG按列计算平均值SUM按列计算值的总和MAX求一列中的最大值MIN求一列中的最小值CNT按列值计算元组个数QBE常用的库函数及其功能常用的库函数及其功能v例1:求学号为S1学生的平均分。v例2:求信息(IS)系学生的平均年龄。SCSnoCnoGradeS1P.AVG.ALLStudentSnoSnameSsexSageSdeptS1P.AVG.ALL数据更新数据更新v修改:修改的命令为U.v插入:插入的命令为I.v删除:删除的命令为D.1)修改操作)修改操作v例
17、1:把刘伟同学转到信息系。v例2:把刘伟同学年龄改为18岁。StudentSnoSnameSsexSageSdeptU.刘伟ISStudentSnoSnameSsexSageSdept刘伟U.18例3:把200215121学生的年龄增加1岁例4:将所有学生年龄增加1岁StudentSnoSnameSsexSageSdeptU.2002151212002151211717+1StudentSnoSnameSsexSageSdeptU.2002151212002151211818+12)插入操作)插入操作例1:在SC表中插入一条选课记录(S6,C1)注意:新插入的元组必须具有主码值,其他属性值可以
18、为空,如本例中的Grade为空。SCSnoCnoGradeI.S6C13)删除操作)删除操作v例1:删除S1同学选修C1课程的信息。v例2:删除删除学生200215089同学的信息。SCSnoCnoGradeD.S1C1StudentSnoSnameSsexSageSdeptD.200215089第二章第二章 关系数据库小结关系数据库小结v关系数据结构 关系(域,笛卡尔积,关系)关系,属性,元组,候选码,主码,主属性,基本关系的性质 关系模式, 关系数据库v关系操作查询(选择、投影、连接、除、并、交、差)数据更新(插入、删除、修改)v关系的完整性约束实体完整性参照完整性(外码)用户定义的完整性v关系数据语言关系代数语言关系演算语言元组关系演算语言ALPHA域关系演算语言QBE练习题练习题v例:数据库中有三个关系S(S#,SNAME,AGE,SEX)C(C#,CNAME,TEACHER)SC(S#,C#,GRADE)请用ALPHA语言、QBE语言完成如下操作v检索学习课程号为C2的学生学号与成绩v检索学习课程号为C2的学生学号与姓名v检索选修课程名为Maths的学生学号与姓名v检索选修课程号为C2或C4的学生学号v检索至少选修课程号C2和C4的学生学号v检索不学C2课的学生姓名与年龄