1、第2章 关系数据库,1,上一章介绍了三种主要的数据模型: 层次模型 网状模型 关系模型 其中关系模型简单灵活,并有着坚实的理论基础,已成为当前最流行的数据模型。 本章主要讲述: 关系模型的数据结构 关系的定义和性质 关系数据库的基本概念 关系运算,2,2.1 关系数据库概述,关系数据库系统是什么?,简单!就是支持关系模型的数据库系统。,关系数据结构,关系操作集合,完整性约束,关系模型的组成,1、关系数据结构,学生表,2.1 关系数据库概述,2、关系操作,2.1 关系数据库概述,最主要的 部分,集合,集合,关系操作(查询):选择、投影、 连接、除、并、交、差,关系操作(修改):增、删、改,关系操
2、作,非关系数据模型的数据操作模式为一次一记录的方式,2.1 关系数据库概述,关系模型中的关系操作:关系代数和关系演算 关系代数:用关系运算表达查询要求 关系演算:用谓词表达查询要求,例如: APLHA,QUEL,关系数据操作语言,关系代数语言,关系演算语言,具有关系代数和关系演算双重特点的语言,元组关系演算语言,域关系演算语言,例如: ISBL,例如: QBE,例如: SQL (标准语言),三者等价,评估标准,3、完整性约束,2.1 关系数据库概述,实体完整性,参照完整性,用户定义完整性,关系模型必须满足的2个约束条件,2.2 关系数据结构,1.关系,1)域(domain): 一组具有相同数据
3、类型的值的集合,用Dn来表示。 如int ,float,0,100,关系模型中,实体和实体之间的联系均由单一的 结构类型即关系(表)来表示。,集合论为数学基础,关系-关系模式-关系数据库,域-笛卡尔积-关系,2.2 关系数据结构,2)笛卡尔积: 定义一组域 D1, D2, ,Dn ,这些域可以完全不同,也可以部分或全部相同。则D1, D2, ,Dn的笛卡尔积为 D1 D2 Dn=(d1, d2, ,dn)| di Di,i=1,2,n,其中每一个元素 (d1, d2, ,dn) 叫作一个n元组(n-tuple),或简称为元组.元素中的每一个值 d叫作一个分量(component)i,2.2 关
4、系数据结构,例:三个域 D1 =导师集合SUPERVISOR=李长江,孙黄河 D2 =专业集合=SPECIALITY=计算机专业,信息专业 D3=研究生集合POSTGRADUATE=米饭,辣椒,青菜,一共有2*2*3=12个元组,D1,D2,D3,(基数),2.2 关系数据结构,则笛卡尔积为:,则D1*D2*D3*=,(李长江,计算机专业,米饭),(李长江,计算机专业,辣椒),(李长江,计算机专业,青菜),(李长江,信息专业,米饭),(李长江,信息专业,辣椒),(李长江,信息专业,青菜),(孙黄河,计算机专业,米饭),(孙黄河,计算机专业,辣椒),(孙黄河,计算机专业,青菜),(孙黄河,信息专
5、业,米饭),(孙黄河,信息专业,辣椒),(孙黄河,信息专业,青菜),2.2 关系数据结构,3)关系:D1 D2 Dn的子集叫作在域D1, D2,Dn 上的关系,用R ( D1, D2,Dn)表示。 R是关系的名字,n是关系的目或度(degree) 关系中的每个元素是关系中的元组,通常用t表示。当n=1时,为单元关系(unary relation)当n=2时,为二元关系(binary relation),关系是笛卡尔积的子集,所以关系也是一个二维表; 表中的每行对应一个元组,每列对应一个域; 每列的名字称为属性,n目关系有n个属性。,2.2 关系数据结构,若某组属性的值能唯一地标识一个元组,而其
6、真子集不行,则该属性集合称为候选码,选定一个候选码,称主码。,主码,非主属性,基本关系(基本表):实际存在的 表,即实际存储数据的对应的表。 视图表:基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。 查询表:查询结果表。,关系的三种类型:,基本关系的6条性质,列是同质的,每一列中的分量是同一类型的数据,来自同一个域。 不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。 列的顺序无所谓,即列的次序可以任意交换。 任意两个元组不能完全相同。 行的顺序无所谓,即行的次序可以任意交换。 分量必须取原子值,即每一个分量都必须是不可分的数据项。,定义关系的描述称为关
7、系模式(relation schema).可以形象化地表示为:R(U,D,DOM,F) R:关系名 U:属性名集合 D:属性组U中属性所来自的域 DOM:属性向域的映象集合 F:属性间数据的依赖关系集合。 简记为:R(U)或 R(A1,A2, An) R为关系名;An为属性名,2、关系模式,关系是值,是关系模式在某一时刻的状态或内容,动态的、随时间不断变化 关系模式是型,关系模式是静态的,稳定的,但实际中,常把二者统称为关系,3、关系数据库,在关系模型中,实体以及实体间的联系都是用关系来表示的。在一个给定的现实世界领域中,相应于所有的实体及实体之间的联系的关系集合构成一个关系数据库。 关系数据
8、库也有型和值之分。型称为关系数据库模式,是对关系数据库的描述,定义了域和域间的关系模式,值称为关系数据库。,2.3 关系的完整性,即对关系的某种约束条件 实体完整性(主属性) 参照完整性(非主属性) 用户定义完整性,关系的两个不变性,主属性不能取空值,不可为空,一、实体完整性(实体完整性规则),外码,二、参照完整性,专业,学生,参照关系,被参照关系,现实世界实体间存在联系,由关系来描述,存在关系间的引用。,例1:学生(学号#,姓名,性别,专业号,年龄)专业(专业号#,专业名称),主码,外码,课程,学生,例2:学生(学号#,姓名,性别,专业号,年龄)课程(课程号#,课程名称)选修(学号#,课程号
9、# ,成绩 ),选修,外码,主码,主码,主码,被参照关系,参照关系,外码,参照完整性规则: 定义主码与外码之间的引用规则。设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码,并称基本关系R为参照关系。,例3:学生2(学号#,姓名,性别,专业号,年龄,班长),二、参照完整性,特点: 同域 无须同名参照规则 或者取空 或者等于被参照关系的主码值,参照完整性规则:,实体完整性和参照完整性适用于任何关系数据库。 用户根据实际情况,对某一关系数据库设定符合语义的约束条件。 取值唯一(同班学生要求不同名) 不为空(姓名) 取值范围限定(年龄28
10、) 属性间的约束条件(买入价卖出价),三、用户定义完整性,2.4 关系代数,关系操作 关系操作是集合操作,操作的对象及结果都是集合,是一次一集合(Set-at-a-time)的方式。而非关系型的数据操作方式是一次一记录(Record-at-a-time)。 关系操作语言的种类,27,2.4 关系代数,关系模型与其他模型相比,最有特色的是它的数据库语言。 这种语言灵活方便、表达能力和功能都很强。 目前关系数据库所使用的语言一般都具有定义、查询、更新和控制一体化的特点,而查询是最主要的部分。 所以说,关系数据库的核心部分是查询,故又称为查询语言,而查询的条件要使用关系运算表达式来表示。 因此,关系
11、运算是设计关系数据语言的基础。 按表达查询的方法不同,关系运算可分为关系代数和关系演算两大类。,28,关系代数的分类及其运算符 关系代数是对关系进行集合代数运算,是基于关系代数的操作语言,称为关系代数语言,简称关系代数。 它是由IBM在一个实验性的系统上实现的,称为ISBL(Information System Base Language)语言。 ISBL的每个语句都类似于一个关系代数表达式。 关系代数的运算对象是关系,运算结果也是关系,关系代数用到的运算符主要包括四类: 集合运算符:(并),-(差),(交),X(广义笛卡尔积); 专门的关系运算符:(选择),(投影),(连接),*(自然连接)
12、,(除); 算术比较运算符:(大于),(大于等于),(小于),(小于等于),=(等于),(不等于); 逻辑运算符:(与),(或),(非),29,关系代数的运算按运算符的不同主要分为两类: 传统的集合运算:把关系看成元组的集合,以元组作为集合中元素来进行运算,其运算是从关系的“水平”方向即行的角度进行的。包括(并),-(差),(交),X(广义笛卡尔积);专门的关系运算:不仅涉及行运算,也涉及列运算,这种运算是为数据库的应用而引进的特殊运算。包括(选择),(投影),(连接),*(自然连接),(除),30,2.4.1 传统的集合运算 传统的集合运算是二目运算,是在两个关系中进行的。但是并不是任意的两
13、个关系都能进行这种集合运算,而是要在两个满足一定条件的关系中进行运算。那么,对关系有什么要求呢?下面先看一个定义。 定义:设给定两个关系R、S,若满足: 具有相同的度n; R中第i个属性和S中第i个属性必须来自同一个域。则说关系R、S是相容的。 除笛卡尔积外,要求参加运算的关系必须满足上述的相容性定义。,31,1. 并(Union) 关系R和关系S的并由属于R或属于S的元组组成,即R和S的所有元组合并,删去重复元组,组成一个新关系,其结果仍为n目关系。记作:RS=t|tRtS 对于关系数据库,记录的插入和添加可通过并运算实现。,32,2. 差(Difference) 关系R与关系S的差由属于R
14、而不属于S的所有元组组成,即R中删去与S中相同的元组,组成一个新关系,其结果仍为n目关系。记作:R-S=t|tRtS 通过差运算,可实现关系数据库记录的删除。,33,3. 交(Intersection) 关系R与关系S的交由既属于R又属于S的元组组成,即R与S中相同的元组,组成一个新关系,其结果仍为n目关系。记作:RS=t|tRtS如果两个关系没有相同的元组,那么它们的交为空。 两个关系的并和差运算为基本运算(即不能用其他运算表达的运算),而交运算为非基本运算,交运算可以用差运算来表示:RS=R-(R-S),34,4. 广义笛卡尔积(Extended Cartesian Product) 两个
15、分别为n目和m目关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1*k2个元组,记作RS=trts| trR,tsS 关系的广义笛卡尔积可用于两关系的连接操作(连接操作将在一节中介绍)。,35,广义笛卡儿积运算实例,36,2.4.2 专门的关系运算 由于传统的集合运算,只是从行的角度进行,而要灵活地实现关系数据库多样的查询操作,必须引入专门的关系运算。在讲专门的关系运算之前,为叙述上的方便先引入几个概念。(1)设关系模式为R(A1,A2,An),它的一个关系为R
16、,tR表示t是R的一个元组,tAi则表示元组t中相应于属性Ai的一个分量。,37,(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称为元组的连接(concatenation),它是一个n+m列的元组,前n个分量为R的一个n元组,后m个分量为S中的一个m元组。 (4)给定一个关系R(X,Z),X和Z为属性组,定义当tX=x时,x
17、在R中的象集(image set),为Zx=tZ|tR,tX=x,它表示R中的属性组X上值为x的诸元组在Z上分量的集合。,38,样板数据库(学生-课程数据库),39,1. 选取(Selection) 选取运算是单目运算,是根据一定的条件在给定的关系R中选取若干个元组,组成一个新关系,记作: F(R)=t|tRF(t)为真 其中,为选取运算符,F为选取的条件,它由运算对象(属性名、常数、简单函数)、算术比较运算符( ,=,)和逻辑运算符( )连接起来的逻辑表达式,结果为逻辑值“真”或“假”。 选取运算实际上是从关系R中选取使逻辑表达式为真的元组,是从行的角度进行的运算。,40,41,2. 投影(
18、Projection) 投影运算也是单目运算,关系R上的投影是从R中选择出若干属性列,组成新的关系,即对关系在垂直方向进行的运算,从左到右按照指定的若干属性及顺序取出相应列,删去重复元组。记作:A(R)=tA|tR 其中A为R中的属性列,为投影运算符。 从其定义可看出,投影运算是从列的角度进行的运算,这正是选取运算和投影运算的区别所在。选取运算是从关系的水平方向上进行运算的,而投影运算则是从关系的垂直方向上进行的。,42,投影运算可以改变关系的属性次序,43,例4 查询学生关系中有哪些系。 Sdept(Student) 结果如右图所示 由例4可以看出,投影后取消了某些属性列后,就可能出现重复行
19、,应该取消这些完全相同的行。所以投影之后,不但减少了属性,元组也可能减少,新关系与原关系不相容。,44,例5 查询选项了1课程的学生号。 SNO(CNO=1(SC) 结果如右图所示。 本例中选取运算和投影运算相结合,先在选课表中选取满足条件的元组,再于SNO属性上进行投影。,45,3. 连接(Join) 连接运算是二目运算,是从两个关系的笛卡尔积中选取满足连接条件的元组,组成新的关系。 设关系R(A1,A2,An)及S(B1,B2,Bm),连接属性集X包含于A1,A2,An,及Y包含于B1,B2,Bm,X与Y中属性列数目相等,且相对应属性有共同的域。若Z=A1,A2An/X (/X:去掉X之外
20、的属性) 及W=B1,B2Bm/Y,则 R及S可表示为R(Z,X),S(W,Y) 关系R和S在连接属性X和Y上的连接,就是以RS笛卡尔积中,选取X属性列上的分量与Y属性列上的分量满足给定比较条件的那些元组,也就是在RS上选取在连接属性X,Y上满足条件的子集,组成新的关系。新关系的度为n+m。,46,记作: RS=t rts |trRtsStrXtsY为真其中,是连接运算符,为算术比较运算符,也称连接; XY为连接条件; 为“=”时,称为等值连接; 为“”时,称为大于连接。 连接运算为非基本运算,可以用选取运算和广义笛卡尔积运算来表示: RS=xy(RS),47,XY,在连接运算中,一种最常用的
21、连接是自然连接。 所谓自然连接就是在等值连接的情况下,当连接属性X与Y具有相同属性组时,把在连接结果中重复的属性列去掉。即如果R与S具有相同的属性组Y,则自然连接可记作: R*S=t rts |trRtsStrY=tsY 自然连接是在广义笛卡尔积RS中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。,48,例2.9 如图2.9(a)、(b)所示的两个关系R与S,(c)为R和S的大于连接(CD),(d)为R和S的等值连接(C=D),(e)为R和S的等值连接(R.B=S.B),(f)为R和S的自然连接。R S(a) (b),49,大于连接(CD) 等值连接(C=D)(
22、c) (d),50,等值连接(R.B=S.B) 自然连接 (e) (f)图2.9 连接运算举例,51,结合上例,我们可以看出等值连接与自然连接的区别:1. 等值连接中不要求相等属性值的属性名相同,而自然连接要求相等属性值的属性名必须相同,即两关系只有在同名属性才能进行自然连接。如上例R中的C列和S中的D列可进行等值连接,但因为属性名不同,不能进行自然连接。 2. 等值连接不将重复属性去掉,而自然连接去掉重复属性,也可以说,自然连接是去掉重复列的等值连接。如上例R中的B列和S中的B列进行等值连接时,结果有两个重复的属性列B,而进行自然连接时,结果只有一个属性列B。,52,例2.10 查询讲授数据
23、库课程的教师姓名。 TN(CN=数据库(C)*TNO,CNO(TC)*TNO,TN(T)或 TN(TNO(CN=数据库(C)*TC)*TNO,TN(T) 结果如右图所示。,53,4. 除法(Division) 除法运算是二目运算,设有关系R(X,Y)与关系S(Y,Z),其中X,Y,Z为属性集合,R中的Y与S中的Y可以有不同的属性名,但对应属性必须出自相同的域。关系R除以关系S所得的商是一个新关系P(X),P是R中满足下列条件的元组在X上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。记作: RS=trX|trRy(S)Yx 其中,Yx为x在R中的象集,x= trX。 除法运算为非基
24、本运算,可以表示为: RS=x(R)x(x(R)SR),54,关系代数,除(Division) 象集:给定一个关系R(X, Y),X和Y为属性组。当tX=x时,x在R中的象集为:Yx=tY| tR, tX=x 除:给定关系R(X, Y)和S(Y,Z),其中X,Y,Z 为属性组。R中的Y和S中的Y可以有不同的名字,但必须取自同一个域,R与S除得到一个新关系P(X), P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。记作:R S=trX| trRy(S) Yx,55,象集,56,(a1,b1)的象,(a1,b2)的象,(a4,b5)的象,X,Y,除
25、,57,X,Y,(a4,b5),=,Y,R上分量值X 的象集Yx包含S在Y上的投影,2.4 关系代数,关系除法运算的步骤: 将被除关系属性分为象集属性和结果属性 对象集属性进行投影目标数据集 将被除关系分组:结果属性值一样的元组分为一组 找出结果集,58,除运算实例,59,=,选课,必修课,选择了所有必修课表 中的课程的学生的学号和成绩,2.5 关系演算,关系演算是以数理逻辑中的谓词演算为基础的,通过谓词形式来表示查询表达式。 根据谓词变元的不同,可将关系演算分为元组关系演算和域关系演算。 2.5.1 元组关系演算语言 元组关系演算是以元组变量作为谓词变元的基本对象。 元组关系演算语言的典型代
26、表是E.F.Codd提出的ALPHA语言,这种语言虽然没有实际实现,但较有名气,INGRES关系数据库上使用的QUEL语言,就是在ALPHA语言的基础上研制的。 这里主要介绍ALPHA语言,60,2.5.1 ALPHA语言 ALPHA语言是以谓词公式来定义查询要求的。在谓词公式中存在客体变元,这里称为元组变量。 元组变量是一个变量,其变化范围为某一个命名的关系。 ALPHA语言的基本格式是:(): 操作符有GET,PUT,HOLD,UPDATE,DELETE,DROP等。 工作空间是指内存空间,可以用一个字母表示,通常用W表示,也可以用别的字母表示。工作空间是用户与系统的通信区。 目标表用于指
27、定操作(如查询、更新等)出来的结果,它可以是关系名或属性名,一条操作语句可以同时对多个关系或多个属性进行操作。,61,操作条件是用谓词公式表示的逻辑表达式,只有满足此条件的元组才能进行操作,这是一个可选项,缺省时表示无条件执行操作符规定的操作。除此之外,还可以在基本格式上加上排序要求,定额要求等。 下面以教学数据库(图1.9)为例,说明ALPHA语言的使用。 1. 数据查询 (1)简单查询 例 查询所有学生的数据。 GET W (S) GET语句的作用是把数据库中的数据读入内存空间W,目标表为学生关系S,代表查询出来的结果,即所有的学生。 冒号后面的操作条件缺省,表示无条件查询。,62,谓词
28、工作空间名 (数字)(表达式):操作条件 Down | up 表达式,排序 及 条件,谓词操作满足的元组,可空,谓词的操作对象,可以为关系或属性名,定额,指定检索结果的元组个数,自定义,建立缓冲区,查询:Get 更新:Put, Hold, Update, Delete, Drop,基本格式:,例2.13 查询所有被选修的课程号码。 GET W (SC.CNO) 目标表为选课关系SC中的属性CNO,代表所有被选修的课程号码,查询结果自动消去重复行。 (2)条件查询 由冒号后面的逻辑表达式给出查询条件,在表达式中可以使用如下三类运算符: 比较运算符:,=等于,; 逻辑运算符:(与),(或),(非)
29、 表示执行次序的括号:() 其中,比较运算符的优先级高于逻辑运算符,可以使用()改变它们的优先级。,64,例2.14 查询计算机系工资高于1000元的教师的姓名和工资。 GET W (T.TN,T.SAL):T.DEPT=计算机T.SAL1000 目标表为教师关系T中的两个属性SN和SAL组成的属性列表。(3)排序查询 例2.15 查询S3同学所选课程号及成绩,并按成绩降序排列。 GET W (SC.CNO,SC.SCORE):SC.SNO=S3DOWN SC.SCORE DOWN表示降序,后面紧跟排序的属性名。 升序排列时使用UP。,65,(4)定额查询 例2.15 查询一名男教师的教师号和
30、姓名。 GET W (1) (T.TNO,T.TN):T.SEX=男 所谓的定额查询就是通过在W后面的括号中加上定额数量,限定查询出元组的个数。 这里(1)表示查询结果中男教师的个数,取出教师表中第一个男教师的教师号和姓名。 排序和定额查询可以一起使用。 例2.16 查询一名男教师的教师号和姓名,并使他的年龄最小。 GET W (1) (T.TNO,T.TN):T.SEX=男 UP T.AGE 此语句的执行过程为:先查询所有男教师的教师号和姓名,再按照年龄由小到大排序,然后找出第一位,也就是年龄最小的男教师。,66,(5)带元组变量的查询 所谓的元组关系演算就是以元组变量作为谓词变元的基本对象
31、,在关系演算的查询操作时,可以在相应的关系上定义元组变量。 元组变量代表关系中的元组,其取值是在所定义的关系范围内变化,所以也称作范围变量Range Variable,一个关系可以设多个元组变量。 例2.17 查询S3同学所选课程号。 RANGE SC X GET W (X.CNO):X.SNO=S3 使用RANGE来说明元组变量,X为关系SC上的元组变量。 如果关系的名字很长,使用起来不方便,这时可以设一个名字较短的元组变量来代替关系名,简化关系名,使操作更加方便。,67,(6)带存在量词的查询 例2.18 查询S3同学所选课程名。 RANGE SC X GET W (C.CN):X(C.C
32、NO=X.CNOX.SNO=S3) 注意:操作条件中使用量词时必须用元组变量。例2.19 查询至少选修一门其课时数为80的课程的学生的姓名。 RANGE C CXSC SCX GET W (S.SN):SCX(SCX.SNO=S.SNOCX(CX.CNO=SCX.CNOCX.CT=80),68,此查询涉及三个关系,需要对两个关系(C和SC)作用存在量词,所以用了两个元组变量。 此语句的执行过程为:先查询课时数为80的课程号,再根据找到的课程号在关系SC中查询其对应的学号,然后根据这些学号在关系S中找到对应的学生姓名。例2.20 查询选修全部课程的学生姓名。 RANGE C CXSC SCX G
33、ET W (S.SN):CXSCX(XSC.SNO=S.SNOCX.CNO=SCX.CNO),69,(7)库函数查询 库函数也称集函数。用户在使用查询语言时,经常要作一些简单的运算。 例如要统计某个关系中符合某一条件的元组数,或某些元组在某个属性上分量的和、平均值等等。 在关系数据库语言中提供了有关这类运算的标准函数,增强了基本检索能力。 常用的库函数如下表所示,70,例2.21 求学号为S1学生的平均分。 GET W (AVG(SC.SCORE):S.SNO=S1 例2.22 求学校共有多少个系 GET W (COUNT(S.DEPT) COUNT函数自动消去重复行,可计算字段“DEPT“不
34、同值的数目。2. 数据更新 更新操作包括修改、插入和删除。 (1)修改 修改操作使用UPDATE语句实现,具体操作分为以下三步:,71,读数据:使用HOLD语句将要修改的元组从数据库中读到工作空间中; 修改:利用宿主语言修改工作空间中元组的属性; 送回:使用UPDATE语句将修改后的元组送回数据库中。 这里HOLD语句是带上并发控制的GET语句。例2.23 把刘伟教师转到信息系。 HOLD W(T.DEPT):T.TN=刘伟 MOVE 信息 TO W.DEPT UPDATE W 在ALPHA语言中,不允许修改关系的主码,例如不能使用UPDATE语句修改教师表T中的教师号。 如果要修改主码,应该
35、先使用删除操作删除该元组,再插入一条具有新主码值的元组。,72,(2)插入 插入操作使用PUT语句实现,具体操作分为以下两步: 建立新元组:利用宿主语言在工作空间中建立新元组; 写数据:使用PUT语句将元组写入到指定的关系中。例2.24 在SC表中插入一条选课记录(S6,C1,85)。 MOVE S6 TO W.SNO MOVE C1 TO W.CNO MOVE 85 TO W.SCORE PUT W(SC),73,PUT语句的作用是把工作空间W中的数据写到数据库中,此例即把已经在工作空间建立的一条选课记录写入到选课关系SC中。 注意:PUT语句只能对一个关系进行操作,在插入操作时,拒绝接受主
36、码相同的元组。(3)删除 ALPHA语言中的删除操作不但可以删除关系中的一些元组,还可以删除一个关系。 删除操作使用DELETE语句实现,具体操作分为以下两步: 读数据:使用HOLD语句将要删除的元组从数据库中读到工作空间中; 删除:使用DELETE语句删除该元组。,74,例2.25 删除学号为S6的学生的信息。 HOLD W(S):S.SNO=S6 DELETE W 例2.26 删除全部学生的信息。 HOLD W(S) DELETE W 2.5.2 域关系演算语言QBE 域关系演算是关系演算的另一种形式。 域关系演算是以元组变量的分量即域变量作为谓词变元的基本对象。 域关系演算语言的典型代表
37、是1975年由IBM公司约克城高级研究试验室的M.M.Zloof提出的QBE语言,该语言于1978年在IBM370上实现。,75,QBE是Query By Example的缩写,也称为示例查询,它是一种很有特色的屏幕编辑语言,其特点如下: (1)以表格形式进行操作 每一个操作都由一个或几个表格组成,每一个表格都显示在终端的屏幕上,用户通过终端屏幕编辑程序以填写表格的方式构造查询要求,查询结果也以表格的形式显示出来,所以它具有直观和可对话的特点。 (2)通过例子进行查询 通过使用一些实例,使该语言更易于为用户接受和掌握。 (3)查询顺序自由 当有多个查询条件时,不要求使用者按照固定的思路和方式进
38、行查询,使用更加方便。,76,使用QBE语言的步骤: (1)用户根据要求向系统申请一张或几张表格,显示在终端上; (2)用户在空白表格的左上角的一栏内输入关系名; (3)系统根据用户输入的关系名,将在第一行从左至右自动填写各个属性名; (4)用户在关系名或属性名下方的一格内填写相应的操作命令,操作命令包括:P.(打印或显示)、U.(修改)、I.(插入)、D.(删除)。如果要打印或显示整个元组时,应将“P”填在关系名的下方,如果只需打印或显示某一属性,应将“P”填在相应属性名的下方。,77,表格形式如表2.2所示 表2.2 QBE操作框架表,78,2.5.2.1 数据查询 1. 简单查询 例2.
39、33 显示全部学生的信息。 方法一:将P.填在关系名的下方方法二:将“P.”填在各个属性名的下方,79,注意:只有目标属性包括所有的属性时,将P.填在关系名的下方。 这种语言之所以称为示例查询,就是在操作中采取“示例”的方法,凡用作示例的元素,其下方均加下划线。如上例中的“赵亦”、“女”等均为示例元素,即域变量。示例元素是所给域中可能的一个值,而不必是查询结果中的元素。比如用作示例的学生姓名,可以不是学生表中的学生,只要给出任意一个学生名即可。,80,2. 条件查询 例2.34 查询所有女学生的姓名。目标属性只有姓名,所以将P.填在属性名的下方。 查询条件中可以使用比较运算符,=和,其中=可以
40、省略。本例的查询条件是SEX=女,“=”被省略。,81,例2.35 查询年龄大于18岁的女学生的姓名。 本例的查询条件是AGE18和SEX=女两个条件的“与”。在QBE中,表示两个条件的“与”有两种方法: 方法一:把两个条件写在同一行上:方法二:把两个条件写在不同行上,但必须使用相同的示例元素,82,例2.36 查询既选修了C1号课程又选修了C2号课程的学生的学号。 本例的查询条件是CNO=C1和CNO=C2两个条件的“与”,但两个条件涉及同一属性CNO,则必须把两个条件写在不同行上,且使用相同的示例元素。例2.37 查询年龄大于18岁或者女学生的姓名。 本例的查询条件是AGE18和SEX=女
41、两个条件的“或”。在QBE中,表示两个条件的“或”,要把两个条件写在不同行上,且必须使用不同的示例元素。,83,例2.38 查询选修C1号课程学生的姓名。 本查询涉及两个关系:S和SC,这两个关系具有公共的属性SNO,SNO作为连接属性,把具有相同的SNO值的两个关系连接起来,SNO在两个表中的值要相同。,84,例2.39 查询未选修C1号课程学生的姓名。 查询条件中的“未选修”需使用逻辑非来表示。QBE中的逻辑非运算符为,填写在关系名下方。如果S1同学选修C1号课程的情况为假,则符合查询的条件,显示S1同学的学号,然后再查询其他同学。,85,3. 排序查询 例2.39 查询全体女教师的教师号
42、和姓名,要求查询结果按工资升序排列,工资相同者按年龄降序排列。对查询结果按照某个属性值升序排列时,则在相应的属性下方填入“AO”,降序排列时,填入“DO”。 如果按照多个属性值同时排序,则用“AO(i)”或“DO(i)”表示,其中I为排序的优先级,I值越小,优先级越高。,86,4. 库函数查询 同ALPHA语言类似,QBE语言也提供了一些有关运算的标准函数,以方便用户。 QBE常用的库函数如表2.2所示表2.2 QBE常用的库函数及其功能,87,例2.40 求学号为S1学生的平均分。,88,2.5.2.2 数据更新 1. 修改 修改的命令为U. 例2.41 把刘伟教师转到信息系。,89,2.
43、插入 插入的命令为I. 例2.42 在SC表中插入一条选课记录(S6,C1)。注意:新插入的元组必须具有主码值,其他属性值可以为空,如本例中的SCORE为空。,90,3. 删除 删除的命令为D.例2.43 删除S1同学选修C1课程的信息。,91,2.6 关系数据库的管理系统,一个数据库管理系统的最低要求:,1、关系数据库(即关系数据结构)。从用户观点看,数据库是由表构成的,并且系统中只有表这种结构。,2、支持选择、投影和(自然)连接运算。对这些运算不要求用户定义任何物理存取路径。,2、(最小)关系系统,1、表式系统,4、全关系系统,3、关系完备系统,S,I,M,S,I,M,S,I,M,S,I,M,S:数据结构I:完整性约束M:数据操纵,关系系统分类,E.F.Codd按关系系统支持关系模型的程度不同, 把关系系统分为四类:,3、关系完备系统,1、表式系统,仅支持关系数据结构,不支持集合操作。,2、最小关系系统,支持关系数据结构和选择、投影、连接三种关系操作。,支持关系数据结构和所有的关系操作。,支持关系模型的所有特征。,4、全关系系统,2.6 关系数据库的管理系统,第二章 习题2、3、7(1-3)、8,