《数据库原理二章节关系数据库》由会员分享,可在线阅读,更多相关《数据库原理二章节关系数据库(63页珍藏版)》请在金锄头文库上搜索。
1、数据库原理 第二章:关系数据库,授课教师:王哲,本次课学习内容,关系代数 关系运算(选择、投影、连接,除运算) * 关系演算是以数理逻辑中的谓词演算为基础的。可分为: 元组关系演算语言(get,put等6条语句) 域关系演算语言QBE,一、关系代数,1、除运算 2、除运算示例 3、除运算练习,1、除运算(Division,亦称商),用途:除法运算同时从行和列的角度进行运算,在表达某些查询时有用,适合于包含“全部”之类的短语的查询,例如“查询已注册选修了所有课程的学生名字”。 定义:给定关系 R(X,Y),S(Y,Z),X,Y,Z为属性列,关系R和关系S中的Y出自相同域集,则: RS=trX|t
2、rRy(S)Yx 其中,Yx为x在R中的象集,x= trX。,象集Zx 给定一个X和关系R(X,Z), Z为属性组。 当tX=x时,x在R中的象集(Images Set)为: Zx=tZ|t R,tX=x 它表示R中属性组X上值为x的诸元组在Z上分量的集合,x1在R中的象集 Zx1 =Z1,Z2,Z3, x2在R中的象集 Zx2 =Z2,Z3, x3在R中的象集 Zx3=Z1,Z3,例1:设关系R、S分别为下图的(a)和(b),RS的结果为图(c),2、除运算示例,分析,在关系R中,A可以取四个值a1,a2,a3,a4 a1的象集为 (b1,c2),(b2,c3),(b2,c1) a2的象集为
3、 (b3,c7),(b2,c3) a3的象集为 (b4,c6) a4的象集为 (b6,c6) S在(B,C)上的投影为 (b1,c2),(b2,c1),(b2,c3) 只有a1的象集包含了S在(B,C)属性组上的投影 所以RS =a1,写出RS=,R,S,RS,例2:有关系A、B1、B2和B3,请分别计算A/B1、 A/B2及A/B3。 分析:在关系中,sno可以取四个值s1,s2,s3,s4 s1的象集为p1,p2,p3,p4 s2的象集为p1,p2 s3的象集为p2 s4的象集为p2,p4,例3:有关系R、S1、S2和S3,请分别计算R/S1、R/S2及R/S3。 分析:在R关系中,sid
4、可以取四个值s1,s2,s3,s4 s1的象集为p1,p2,p3,p4,s2的象集为p1,p2 s3的象集为p2,s4的象集为p2,p4,例4:查询至少选修1号课程和3号课程的学生号码 解题思路:首先建立一个临时关系K, 然后求Sno,Cno(SC)K 200215121象集1,2,3 200215122象集2,3 K=1,3 于是:Sno,Cno(SC)K=200215121,关系除法运算的步骤: 将被除关系属性分为象集属性和结果属性 对象集属性进行投影目标数据集 将被除关系分组:结果属性值一样的元组分为一组 找出结果集,3、除运算练习,1、已知关系r、s、w如图所示,计算T= (r s)w
5、) S,r关系 s关系 w关系,解:T=,2、检索学习全部课程的学生学号 3、检索学习全部课程的学生学号和姓名 4、检索所学课程包含学生S3所学课程的学生学号,Sno,Cno(SC)Cno(Course),Sno,Cno(SC)Cno(Course) Sno,Sname(Student) 或:Sno,Sname(Student Sno,Cno(SC)Cno(Course),Sno,Cno(SC) Cno( sno=S3(SC),关系代数小结,传统的集合运算 并、差、交、笛卡尔积 专门的关系运算 选择、投影、连接、除 5种基本运算 并、差、笛卡尔积、投影、选择,二、关系演算,关系演算是以数理逻辑
6、中的谓词演算为基础的,通过谓词形式来表示查询表达式。 根据谓词变元的不同,可将关系演算分为元组关系演算和域关系演算。前者以元组为变量,简称元组演算;后者以域为变量,简称域演算。,元组关系演算 Tuple Relational Calculus ,简称TRC 元组关系演算语言ALPHA 元组关系表达式 域关系运算 Domain Relational Calculus ,简称DRC 域关系演算语言QUE,1、元组关系演算,元组关系演算是以元组变量作为谓词变元的基本对象。 元组关系演算语言的典型代表是E.F.Codd提出的ALPHA语言,这种语言虽然没有实际实现,但较有名气,INGRES关系数据库上
7、使用的QUEL语言,就是在ALPHA语言的基础上研制的。 这里主要介绍ALPHA语言。,ALPHA语言,基本格式是: (): 操作符有GET、PUT、HOLD、UPDATE、DELETE,DROP等6条语句。 工作空间是指内存空间,通常用W表示,也可以用别的字母表示。工作空间是用户与系统的通信区。 目标表用于指定操作(如查询、更新等)出来的结果,它可以是关系名或属性名,一条语句可以同时对多个关系或多个属性进行操作。 只有满足操作条件的元组才能进行,操作操作条件可以为空。 除此之外,还可以在基本格式上加上排序要求,定额要求等。,1)简单查询,下面以学生课程数据库(P56)为例,说明ALPHA语言
8、的使用。 例1:查询所有学生的数据 GET W (Student) GET语句的作用是把数据库中的数据读入内存空间W,目标表为学生关系S,代表查询出来的结果,即所有的学生。 冒号后面的操作条件缺省,表示无条件查询。 例2:查询所有被选修的课程号码。 GET W (SC.Cno) 目标表为选课关系SC中的属性CNO,代表所有被选修的课程号码,查询结果自动消去重复行。,由冒号后面的逻辑表达式给出查询条件,在表达式中可以使用如下三类运算符: 比较运算符:,=等于,; 逻辑运算符:(与),(或),(非) 表示执行次序的括号:() 其中,比较运算符的优先级高于逻辑运算符,可以使用()改变它们的优先级。,
9、2)条件查询,例1:查询所有男学生的姓名。 GET W (Student.Sname) : Student. Ssex = 男 例2:查询信息系(IS)中年龄小于20岁的学生的学号和年龄 GET W (Student.Sno,Student.Sage): Student.Sdept=IS Student.Sage20 例3:查询信息系(IS)或计算机系(CS)的男学生,GET W (Student): (Student.Sdept=IS V Student.Sdept=CS) Student. Ssex = 男,3)排序检索,例1:查询S3同学所选课程号及成绩,并按成绩降序排列。 GET W
10、(SC.CNO,SC.SCORE):SC.SNO=S3 DOWN SC.SCORE 例2:查询计算机科学系(CS)学生,按年龄升序排序 GET W (Student):Student.Sdept=CS up Student.Sage DOWN表示降序,后面紧跟排序的属性名。 升序排列时使用UP。,4)限额检索,例1:查询查询一名男同学。 GET W (1) (Student) : Student. Ssex = 男 例2:查询一名男同学的教师号和姓名,并使他的年龄最小。 GET W (1) (Student) : Student. Ssex = 男 up Student.Sage 所谓的定额查
11、询就是通过在W后面的括号中加上定额数量,限定查询出元组的个数。 这里(1)表示查询结果中男同学的个数,取出学生表中第一个男同学的学号和姓名。,5)带元组变量的查询,元组关系演算就是以元组变量作为谓词变元的基本对象,元组变量是在所定义的关系范围内变化,所以也称作范围变量Range Variable,一个关系可以设多个元组变量。 例1:查询S3同学所选课程号。 RANGE SC X GET W (X.CNO):X.SNO=S3 使用RANGE来说明元组变量,X为关系SC上的元组变量。 如果关系的名字很长,使用起来不方便,这时可以设一个名字较短的元组变量来代替关系名,简化关系名,使操作更加方便。,例
12、2:查询所有男学生的姓名。 RANGE Student X GET W (X.Sname) : X. Ssex = 男 例3:查询信息系(IS)中年龄小于20岁的学生的学号和年龄 RANGE Student X GET W (X.Sno,X.Sage): X.Sdept=ISX.Sage20,6)带存在量词及多个关系的查询,操作条件中使用量词时必须用元组变量 例1:查询S3同学所选课程号 RANGE SC X GET W (X.CNO): X(X.SNO=S3) 例2:查询S3同学所选课程名。 RANGE SC X GET W (Course.Cname):X(Course.Cno=X.Cno
13、X.Sno=S3),例3:查询S3同学所选课程名 RANGE SC X Course CX GET W (CX.Cname):X CX (CX.Cno=X.CnoX.Sno=S3) 此查询涉及两个关系,对两个关系(Course和SC)作用存在量词,所以用了两个元组变量。,例4:查询至少选修一门其先行课为6号课程的学生名字 RANGE Course CX SC SCX GET W (Student.Sname): SCX (SCX.Sno=Student.Sno CX (CX.Cno=SCX.CnoCX.Pcno=6),例5:查询选修全部课程的学生姓名。,RANGE SC X Course CX
14、 GET W (Student.SN) : CXSCX (SCX.SNO=Student.SNOCX.CNO=SCX.CNO),7)用蕴涵(Implication)的检索,例1:查询最少选修了200215122学生所选课程的学生学号 RANGE Couse CX SC SCX SC SCY GET W (Student.Sno): CX(SCX (SCX.Sno=200215122SCX.Cno=CX.Cno) SCY(SCY.Sno=Student.Sno SCY.Cno= CX.Cno),8)使用聚集函数,用户在使用查询语言时,经常要作一些简单的运算。 例如要统计某个关系中符合某一条件的元
15、组数,或某些元组在某个属性上分量的和、平均值等等。 在关系数据库语言中提供了有关这类运算的标准函数,增强了基本检索能力。 常用的库函数右表所示:,例1:求学号为S1学生的平均分。 GET W (AVG(SC.SCORE):S.SNO=S1 例2:求学校共有多少个系 GET W (COUNT(Student.Sdept) 例3:求学生的最大年龄 GET W (max(Student.Sage) COUNT函数自动消去重复行,可计算字段“DEPT“不同值的数目。,数据更新,更新操作包括修改、插入和删除。 1)修改操作 修改操作使用UPDATE语句实现,具体操作分为以下三步: 读数据:使用HOLD语句将要修改的元组从数据库中读到工作空间中; 修改:利用宿主语言修改工作空间中元组的属性; 送回:使用UPDATE语句将修改后的元组送回数据库中。 这里HOLD语句是带上并发控制的GET语句。,例1:把刘伟同学转到信息(IS)系。 HOLD W(Student.Sname ,Student.Sdept):Student.Sname=刘伟 MOVE IS TO W.DEPT UPDATE W 在ALPHA语言中,不允许修改关系的主码,例如不能使用UPDATE语句修改学生表中的学生学号。 如果要修改主码,应该先使用删除操作删除该元组,再插入一