1、关系运算,关系模型与其他模型相比,最有特色的是它的数据库语言。这种语言灵活方便、表达能力和功能都很强。目前关系数据库所使用的语言一般都具有定义、查询、更新和控制一体化的特点,而查询是最主要的部分。查询的条件要使用关系运算表达式来表示。因此,关系运算是设计关系数据语言的基础。按表达查询的方法不同,关系运算可分为关系代数和关系演算两大类。,3.4 关系代数,一种抽象的查询语言用对关系的运算来表达查询关系代数运算的三个要素运算对象:关系运算结果:关系运算符:四类,关系代数运算符,集合运算符将关系看成元组的集合运算是从关系的“水平”方向即行的角度来进行专门的关系运算符不仅涉及行而且涉及列算术比较符辅助
2、专门的关系运算符进行操作逻辑运算符辅助专门的关系运算符进行操作,关系代数运算符,关系代数,传统的集合运算对关系的元组进行运算其运算是从关系的“水平”方向即行的角度进行的包括集合并、集合交、集合差、广义笛卡儿积专门的关系运算对关系的元组和域进行运算选择、投影、连接、除基本运算集合并、集合差、广义笛卡儿积、选择、投影由基本运算可以推导出其它所有运算,集合的并、交、差运算,两个关系R和S若进行并,交,差运算,则它们必须是相容的:关系R和S必须是同元的,即它们的属性数目必须相同。对于所有i,R的第i个属性的域必须和S的第i个属性的域相同。,并运算,定义设R和S是n元关系,并且两者各对应属性的数据类型也
3、相同。则R和S的并运算定义为:RS = t |t R tS 其结果仍为n元关系,由属于R或属于S的元组构成。,RS,并运算(续I),RS,R,S,差运算,定义设R和S是n元关系,并且两者各对应属性的数据类型也相同。则R和S的差运算定义为:RS =t | tR tS 其结果仍为n元关系,由属于R而不属于S的元组构成。,RS,差运算(续I),RS,R,S,交运算,定义设R和S是n元关系,并且两者各对应属性的数据类型也相同。则R和S的交运算定义为: RS = t | tR tS 其结果仍为n元关系,由既属于R又属于S的元组构成。交运算可以通过差运算来重写:RS = R (R S),RS,交运算(续I
4、),RS,R,S,集合的并、交、差运算,广义笛卡尔积,定义两个关系R,S,其度分别为n,m,则它们的广义笛卡尔积是所有这样的元组集合:元组的前n个分量是R中的一个元组,后m个分量是S中的一个元组。RS= t | t= rR sS RS的度为R与S的度之和, RS的元组个数为R和S的元组个数的乘积。,广义笛卡尔积,RS,R,S,专门的关系运算,由于传统的集合运算,只是从行的角度进行,而要灵活地实现关系数据库多样的查询操作,必须引入专门的关系运算。在讲专门的关系运算之前,为叙述上的方便先引入几个概念。,专门的关系运算,(1)设关系模式为R(A1,A2,An),它的一个关系为R,tR表示t是R的一个
5、元组,tAi则表示元组t中相应于属性Ai的一个分量。(2)若A=Ai1,Ai2,,Aik,其中Ai1,Ai2,Aik是A1,A2,,An中的一部分,则A称为属性列或域列,则表示A1,A2,,An中去掉Ai1,Ai2,,Aik后剩余的属性组。tA=tAi1,tAi2,tAik表示元组t在属性列A上诸分量的集合。,专门的关系运算,(3)R为n目关系,S为m目关系,trR, tsS,trts称为元组的连接,它是一个n+m列的元组,前n个分量为R的一个n元组,后m个分量为S中的一个m元组。(4)给定一个关系R(X,Z),X和Z为属性组,定义当tX=x时,x在R中的象集(image set),为Zx=t
6、Z|tR,tX=x,它表示R中的属性组X上值为x的诸元组在Z上分量的集合。,选择运算,选择运算是从指定的关系中选择某些元组形成一个新的关系,被选择的元组是用满足某个逻辑条件来指定的。选择运算表示为:其中R是关系名,是选择运算符,F是逻辑表达式。,选择运算,B=b(R),B=b C=c(R),R,职工号=E3(订购单),订购单关系,从订购单关系中选择职工号为“E3”的元组构成新的关系,选择运算,投影运算,投影运算对指定的关系进行投影操作,根据该关系分两步产生一个新关系:1)选择指定的属性,形成一个可能含有重复行的表格;2)删除重复行,形成新的关系。,投影运算,投影运算表示为:其中R是关系名,是投
7、影运算符,A是被投影的属性或属性集。,投影运算举例,订购单关系,选取职工号和供应商号两列构成新的关系,职工号,供应商号(订购单),投影运算,选取运算是从关系的水平方向上进行运算的,而投影运算则是从关系的垂直方向上进行的。投影运算可以改变关系的属性次序投影后取消了某些属性列后,就可能出现重复行,应该取消这些完全相同的行。所以投影之后,不但减少了属性,元组也可能减少,新关系与原关系不相容。,投影运算,B,A(R),R,从订购单关系中,选取出职工号为E3的所经手的订购单号和与之相关的供应商号。,订购单关系,供应商号,订购单号(职工号=E3(订购单),连接运算,连接运算是两个表之间的运算,这两个表通常
8、是具有一对多联系的父子关系。所以连接过程一般是由参照关系的外部关键字和被参照关系的主关键字来控制的,这样的属性通常也称为连接属性。,连接运算,定义从两个关系的广义笛卡儿积中选取给定属性间满足操作的元组。R S = t | t = rR sS rA sB 为算术比较符,当为等号时称为等值连接;为“”时,称为大于连接等等。,连接运算(续I),R S,B D,R,S,RS,自然连接,在连接运算中最常用的连接是自然连接。定义从两个关系的广义笛卡儿积中选取在相同属性列上取值相等的元组,并去掉重复的属性列。R S = t | t = rR sS rB=sB,自然连接,自然连接是特殊的等值连接等值连接:从两
9、个关系(R、S)的笛卡尔积中选取属性(A、B)值相等的元组自然连接:在等值连接中取消重复属性自然连接做了三件事:计算广义笛卡尔积RS ;选择满足条件rAi=sBj的所有元组;去掉重复的属性。,自然连接(续I),S,R,R S,根据以上关系求出在上海工作的职工的工资值都有哪些?,仓库,职工,关系代数语句为:,综合运算实例,R2=R1 职工,查询过程示意,选择运算,自然连接运算,投影运算,外连接,例:列出老师的有关信息,包括姓名、工资、所教授的课程。 P# ,PN , SAL , C# , CN(PROF) PC C),问题:有关P03号职工的姓名和工资信息没有显示出来。,PROF:,PC:,C:
10、,外连接(续I),外连接为避免自然连接时因失配而发生的信息丢失,可以假定往参与连接的一方表中附加一个取值全为空值的行,它和参与连接的另一方表中的任何一个未匹配上的元组都能匹配,称之为外连接。外连接 = 自然连接 + 失配的元组。外连接的形式:左外连接、右外连接、全外连接 。左外连接 = 自然连接 + 左侧表中失配的元组。右外连接 = 自然连接 + 右侧表中失配的元组。全外连接 = 自然连接 + 两侧表中失配的元组。,外连接(续II),R,S,R,S,R,S,R,S,R,S,除运算,例题:,R,S,求选修了全部课程的学生,除运算,没有选修全部课程的学生,所有学生选修全部课程,课程,物理,姓名,王
11、红,张军,姓名,王红,姓名,张军,选修了全部课程的学生,姓名,王红,除运算,除运算是上述运算过程的等价算法设R(X,Y)和S(Y)是两个关系,则 RS = X(R) X( X(R) S) R ),除运算,设有关系R(X,Y)和S(Y),其中X、Y可以是单个属性或属性集,则除法运算定义为:,如何理解除运算?,理解除法运算,R(X,Y)是被除关系S(Y)是除关系商关系由R中某些X属性值构成,其中的任一X值所对应的一组Y值都包含除关系S。除运算常用于包含语义“至少”的语义的查询或运算,除运算的例子,它的含义是:至少向WH1、WH3、WH5供货的供应商号。,基本运算及变换,在关系代数运算中集合的并运算
12、、差运算、笛卡尔积运算以及选择运算和投影运算是5种基本运算,其他的运算(如集合的交运算以及连接运算和除运算)可以用5种基本运算来表达,引进它们并不增加语言的能力,但是可以简化表达。,基本运算及变换,两个关系的交运算可以表示为:R S = R - (R - S )两个关系的自然连接运算可以表示为:两个关系的除运算可以表示为:,例子表,STUDENT,SC,COURSE,练习,查找学号为95001的学生姓名和年龄Sname, Sage( Sno=95001 (STUDENT)查找信息系的男学生的学号和姓名Sno, Sname ( Sdept=IS Ssex=男( STUDENT)查找选修了1号课程
13、或3号课程的学生的学号Sno ( Cno=1 Cno=3 (SC)或:Sno ( Cno=1 (SC) Sno ( Cno=3 (SC),练习(续I),求选修了1号而没有选2号课程的学生号。Sno(Cno = 1 (SC) Sno(Cno = 2(SC)求选修了1号和2号课程的学生号。Sno(Cno = 1 (SC) Sno(Cno = 2(SC)求选修了1号课程的学生号和姓名。Sno,Sname(Cno = 1 (Student SC),练习(续II),查询至少选修了一门其直接先行课为5号课程的学生姓名。Sname(Cpno = 5 (Course) SC Sno, Sname(STUDEN
14、T)列出所有学生的选课情况STUDENT SC查询选修了全部课程的学生号和姓名(Sno,Cno(SC) Cno (Course) ) Sno, sname(STUDENT),作业(4月12日交),课本第80页第5题用关系代数解决下列数据库查询问题,Customers,Agents(代理商),续,products,Orders,续,Question:找出所有顾客、代理商和商品都在同一个城市的三元组(cid,aid,pid)。找出所有顾客、代理商和商品两两不在同一个城市的三元组(cid,aid,pid)。取出至少被一个在杭州的顾客通过位于上海的代理商定购的商品的名字。列出所有在同一个城市的代理商的aid对。,续,取出销售过所有曾被顾客c002定购过的商品的代理商的名字。取出所有的三元组(cid,aid,pid),要求对应的顾客,代理商和商品中至少有两者是位于同一座城市。取出接受过上海的顾客一笔总额超过¥500的订单的代理商的aid值。取出只从一家代理商处定购过商品的顾客的cid值。,