关系数据库基本理论计算机软件技术基础教程教学.ppt

上传人:牧羊曲112 文档编号:6040839 上传时间:2023-09-17 格式:PPT 页数:138 大小:670KB
返回 下载 相关 举报
关系数据库基本理论计算机软件技术基础教程教学.ppt_第1页
第1页 / 共138页
关系数据库基本理论计算机软件技术基础教程教学.ppt_第2页
第2页 / 共138页
关系数据库基本理论计算机软件技术基础教程教学.ppt_第3页
第3页 / 共138页
关系数据库基本理论计算机软件技术基础教程教学.ppt_第4页
第4页 / 共138页
关系数据库基本理论计算机软件技术基础教程教学.ppt_第5页
第5页 / 共138页
点击查看更多>>
资源描述

《关系数据库基本理论计算机软件技术基础教程教学.ppt》由会员分享,可在线阅读,更多相关《关系数据库基本理论计算机软件技术基础教程教学.ppt(138页珍藏版)》请在三一办公上搜索。

1、17.1 基本概念17.2 关系运算17.3 关系数据库语言17.4 关系模式规范化,第17章 关系数据库基本理论,返回主目录,第17章 关系数据库基本理论,17.1 基 本 概 念 由于关系模型与其他模型(层次或网状)相比,不仅能直观地利用人们所熟悉的表格来描述数据库中的数据,而且能够利用先进的数学工具关系代数来对这些表格进行任意的分割和组装,随机地产生出用户所需的各种新表格,从而为关系数据库的发展提供了基础和保证。从数学的角度而言,关系是集合论中的一个概念,下面给出它的定义。定义17.1 给定一组集合D1,D2,Dn,它们可以是相同的,若R是这样一个有序n元组:(d1,d2,dn)|diD

2、i,i=1,2,n,则称R是对于这n个集合的一个关系,并称集合D1,D2,Dn为关系R的域,称n为关系的度。这里的域是值的集合,它可以是整数集合、字符串集合、实数集合由于n元组(也简称为元组)可以看成是从属性名到属性的域中的值的映射,从而可用映射的集合来定义关系,即有以下定义。定义17.2 关系是命名属性集合下元组的有限集合,其中每一元组是命名属性集合到各对应值域中的值的映射。例17.1(学号,姓名,出生年月,性别,班级)构成命名属性集合,粗略地说,以上给定的命名属性集合(属性名集合)给出了一个关系模式。关系模式就是二维表的表框架,相当于记录型。设关系名取REL,其属性为A1,A2,Ak,关系

3、模式记为REL(A1,A2,Ak),则以上学生关系模式为,粗略地说,以上给定的命名属性集合(属性名集合)给出了一个关系模式。关系模式就是二维表的表框架,相当于记录型。设关系名取REL,其属性为A1,A2,Ak,关系模式记为REL(A1,A2,Ak),则以上学生关系模式为,学生(学号,姓名,出生年月,性别,班级)实际上,关系模式除了上述的属性名集外,还有其他内容。它应该是结构的描述或对关系特性的表征。这些特性包括描述关系的各种属性、属性值的限制、各属性间的数据依赖性以及对关系的一些强制性的限制,即通常所说的完整性约束条件。下面以数学形式给出关系模式的定义。定义17.3 关系模式是一个多元组 RE

4、L(U,D,DOM,I,F)其中,REL表示关系名,U是组成REL的有限属性名集,D是U中属性的值域,DOM是属性列到域的映射,I是一组完整性约束条件,F是属性间的一组依赖关系。,关系模式和关系是关系数据库中密切相关但又有所区别的两个概念。关系模式描述了关系的信息结构以及语义约束,是关系的“型”。而关系则是关系模式在某一时刻的“当前值”,它是现实世界某一时刻的状态的真实反映。所有关系的当前值构成(关系)数据库。关系是随时间变化而变化的,但这种变化不改变属性的特性和属性间的联系。关系数据库的逻辑设计主要是关系模式的设计,因此,常称关系模式是关系数据库的结构和关系的框架或内涵,而把关系称为关系模式

5、的实例或外延。在关系模型中所使用的术语与其他模型中的术语有些不同,但它们之间存在对应关系。在关系模型中,将能够惟一识别元组的属性或最小属性组称为关系的候选关键字。而选定的用于识别元组的属性或最小属性组称为关系的主关键字,也称为主码。,关系的每一列称为一个域,它包含了一个属性的所有取值。关系中的列的数目称为阶数,行的数目称为基数。关系模型中的术语与数据世界中的术语的对应关系见表17.1。,17.2 关 系 运 算,在关系模型中,实体以及实体间的联系采用了单一数据结构关系来表示。对数据的操作就是对关系的运算。关系运算的形式可分为两大类:(1)关系代数:把关系看作集合,以关系为运算对象的关系运算。(

6、2)关系演算:使用数理逻辑谓词演算概念的关系运算。按运算对象不同可分为元组关系演算和域关系演算。1.关系代数 关系代数是以集合代数为基础发展而来的,它以关系为运算对象。,关系代数的运算可分为两类:传统的集合运算和专门的关系运算。1)传统的集合运算 传统的集合运算包括并、交、差和笛卡尔积。(1)并:设R和S为同类关系,即具有相同的度和相应属性在相同的域中取值,但并不要求属性名一致,则关系R和S的并由属于R或属于S的所有元组构成,记作RS。设t表示元组,则其数学表达形式为(2)交:设R和S为同类关系,则关系R和S的交由属于R同时属于S的所有元组构成,记作RS,其数学表达形式为,(2)交:设R和S为

7、同类关系,则关系R和S的交由属于R同时属于S的所有元组构成,记作RS,其数学表达形式为(3)差:设R和S为同类关系,则关系R和S的差由属于R但不属于S的所有元组构成,记作RS,其数学表达形式为 RS=t|tRtS 图17.1给出了关系R和S的并、交和差的图表表示。(4)笛卡尔积:设R为k1元关系,S为k2元关系,则R和S的笛卡尔积是一个(k1+k2)元的关系,其中每个元组的前k1个分量取自R中的一个元组,后k2个分量取自S中的一个元组,记作RS,其数学表达式为 图17.2给出了一个笛卡尔积的实例。,图17.1 同类关系R和S的并、交、差运算,图17.2 R和S的笛卡尔积,2)专门的关系运算 专

8、门的关系运算包括投影、选择、连接、自然连接和除。(1)投影:对关系的投影运算,是从关系中取出所指定的属性列,并且除去重复元组来构成新的关系的运算。设R是一个k元关系,Ai1,Ai2,Aim分别是它的第i1,i2,im个属性,则关系R在Ai1,Ai2,Aim上的投影是一个m元关系,其属性为Ai1,Ai2,Aim,记作 其中,A表示R属性的子集Ai1,Ai2,Aim;tA表示R中元组对应于A的分量。图17.3给出一个选择的实例。,其中,是选择运算符,F是限定条件布尔表达式。F由三部分组成:运算对象:列号、常数或属性名;算术比较符:、;逻辑运算符:(NOT)、(AND)、(OR)。图17.4给出了一

9、个选择的实例。F(R)的选择是在行的方向上进行的。(3)连接:连接运算把两个关系的共同的域按某种条件约束结合在一起形成新的关系。设R是k1元关系,S是k2元关系,算术比较符是。则关系R的第i列和关系S的第j列的连接定义为,图17.4 R的选择运算,(3)连接:连接运算把两个关系的共同的域按某种条件约束结合在一起形成新的关系。设R是k1元关系,S是k2元关系,算术比较符是。则关系R的第i列和关系S的第j列的连接定义为(i和j中的i、j若是属性名时,可省略)从定义中可以看出,连接运算是从两个关系的笛卡尔积中选取满足一定连接条件的元组集合,连接的结果是一个(k1+k2)元的关系。图17.5给出了一个

10、连接的实例。,图17.5 连接实例,(4)自然连接:当两个关系R和S的某些列具有相同的属性名时,可利用这些同名属性列中的相同值作为连接条件将两个关系连接起来,构成自然连接。在连接后的关系中,不仅含有R与S不同的属性列,而且含有相同的属性列,其元组的数目由相同属性列中的相同值决定。设R是属性名组为(A1,A2,Am,Ak1)的k1元关系,S是属性名组为(A1,A2,Am,Bm+1,Bk2)的k2元关系,其中A1,A2,Am是同名属性列,则R和S的自然连接定义为 进行自然连接的步骤如下:计算RS;,选择AiR=AiS的所有元组;去掉重复属性。自然连接是关系间最重要的一种连接,一般无特殊说明的连接指

11、的是自然连接。图17.6给出了一个自然连接的实例。(5)除:除运算是指用一个(m+n)度的关系R除以一个n度关系S,运算结果生成一个m元的新关系。这里R的第(m+i)个属性和S的第i个属性(i=1,n)必须是在相同的域上定义。当把R的前m个属性看作一个组合属性x,后n个属性看作一个组合属性y,则S也可类似地看成有一个组合属性y。这样以S中的y值来对R进行分组,当组中含有y值时,则组中的x值便构成了R除以S的一个元组。R除以S的数学表达式为,图17.6 R和S的自然连接,其中为关系R中除去与S关系相同的其余属性。图17.7给出了除运算的实例。上面我们对关系代数的九种运算分别进行了介绍,在这九种运

12、算中,并、差、笛卡尔积、投影、选择称为基本关系代数运算,其他的运算可由这五种运算推导而来。用关系代数运算可完成对数据的检索、删除和插入操作。这些操作是通过将关系代数运算经有限次复合而成。关系代数对数据库的数据操作是完备的,也就是说利用关系代数可实现一切数据操作。下面我们将以一个学生课程数据库为例说明如何用关系代数来实现数据操作。,图17.7 除运算,上面我们对关系代数的九种运算分别进行了介绍,在这九种运算中,并、差、笛卡尔积、投影、选择称为基本关系代数运算,其他的运算可由这五种运算推导而来。用关系代数运算可完成对数据的检索、删除和插入操作。这些操作是通过将关系代数运算经有限次复合而成。关系代数

13、对数据库的数据操作是完备的,也就是说利用关系代数可实现一切数据操作。下面我们将以一个学生课程数据库为例说明如何用关系代数来实现数据操作。一个简单的学生课程数据库由三个关系组成,如图17.8所示。例17.2 检索出选择C101课程的学生名。解:首先从SC表中选择C#为C101的元组,然后将STU与选择后构成的表进行自然连接,最后从自然连接形成表中对SN投影,即得所求。整个运算为,图17.8 简单的学生课程数据库,例17.3 检索选修全部课程的学生名。解:首先从C表中对C#投影得到全部课程代号,然后用SC表对S#和C#投影所得的表除以全部课程代号,即可得到相应的S#,最后用S#与STU表作自然连接

14、,并从自然连接形成的表中对SN投影,即得所求。整个运算为 例17.4 将学号为19205的学生选修的课程代号为C401的所得成绩B插入关系SC。解:这个操作只需利用并运算即可完成。整个运算为SC19205,C401,B,例17.5 删除学生王凡所选修的课程代号为C201的所得成绩。解:首先从STU表中选择SN为王凡的元组,并对选择后构成的表进行S#投影,得到王凡的学号。通过对SC表中选择C#为C201的元组,得到所有选择了C201的SC元组。将所选择的SC元组与王凡的学号自然连接得到王凡选修C201课程的SC元组。最后,使用从SC表中减去王凡选修C201课程的SC元组,即得所求。整个运算为 2

15、.元组关系演算 元组关系演算使用元组作为变量、关系演算公式作为约束条件,来产生所需的元组集合。这个元组集合构成了一个演算结果关系。元组关系演算表达式可用以下形式表示为 t:(t),其中,t表示元组变量,它的取值范围是它所属于的整个关系;(t)表示作为约束条件的关系演算公式,它由原子公式和运算符构成。原子公式是指只含有算术比较运算符的关系演算公式,共分为三类:(1)R(u)。R表示关系名;u表示元组变量;R(u)表示u是关系R中的元组。(2)tiSj。t和S表示元组变量;表示算术比较运算符,它包括=,,,;tiSj表示t的第i个分量与S的第j个分量应满足条件。例如t1S2表示t的第1个分量小于S

16、的第2个分量。(3)tiC。C表示常量。这个原子公式表示t的第i个分量和C满足条件。,除了以上所使用的算术运算符外,关系演算还使用以下逻辑运算符和量词运算符:(1)逻辑运算符包括(逻辑与)、(逻辑或)和(逻辑非)三种。(2)量词运算符包括(存在量词)、(全称量词)两种。存在量词和全称量词使用在元组变量前面,表示了对该元组变量的一种约束关系。例如:t(t)表示若存在一个t使得(t)为真时,则 t(t)为真,否则为假;t(t)表示,仅当所有的t都使(t)为真时,才使 t(t)为真。当有存在量词或全称量词出现在元组变量前时,该元组变量称为“约束”变量,否则为“自由”变量。自由变量和约束变量的概念相当

17、于程序设计语言中的全局变量和局部变量的概念。,在关系演算中,演算执行的先后顺序为括号、算术运算符、量词运算符、逻辑运算符、。关系代数中的五种基本运算都可以用元组关系演算来表示,所以元组关系演算对数据库的操作也是完备的。下面给出关系代数中的五种基本运算的元组关系演算形式。(1)关系R和S的并集RS可表示为 t:RS(2)关系R和S的差集R-S可表示为 t:R S(3)关系R和S的笛卡尔积RS可表示为,t(r+s):(u(r)(v(s)(R(u)S(v)t1=u1tr=urtr+1=v1tr+s=vs)其中,t(r+s)表示t元组具有r+s元,u(r)表示u元组有r元,v(s)表示v元组有s元。(

18、4)关系R的投影运算i1,i2,ik(R)可表示为 t(k)u(R(u)t1=ui1 tk=uik)其中,i1,i2,ik是R的元组中属性的编号。(5)关系R的选择运算F(R)可表示为 t:R(t)F(t)其中,F(t)表示选择条件公式,由元组t的各分量表示ti和算术运算符以及逻辑运算符构成。,下面给出关系代数中的四个例子的元组关系演算表达式,来说明元组关系演算的具体应用。(1)例17.2的元组关系演算表达式为 t2:STU(t)u(SC(u)t1=u1u2=C101)(2)例17.3的元组关系演算表达式为 t2:STU(t)u(c(u)v(SC(v)u1=v2v1=t1)(3)例17.4的元

19、组关系演算表达式为 t:SC(t)t1=19205t2=C401t3=B(4)例17.5的元组关系演算表达式为 t:SC(t)(u(STU(u)u2=王凡t1=u1)v(C(v)v1=C201v1=t2),3.域关系演算 域关系演算是以元组的分量为变量(又称域变量)的关系演算。这种关系演算与元组关系演算的主要区别有两点:用域变量代替了元组变量;域变量的取值范围是某个值域而不是整个关系。与元组演算表达式类似,域关系演算表达式的形式为 t1,t2,tk|(t1,t2,tk)其中,t1,t2,tk是域变量;(t)为约束条件的关系演算公式,它由原子公式和运算符构成。域关系演算中的原子公式分为两类:(1

20、)R(Ai:Vj|i,j=1,2,)。其中,Ai是关系R中的属性名,Vj是域变量或常量。,例如C(C#:t1,CN:电子线路)表示课程名为电子线路的课程代号。(2)xy。其中,x,y或都为域变量,或一个为域变量而另一个为常量。是算术运算符。xy表示x和y满足条件。在域关系演算中使用的运算符和运算的执行顺序都与元组关系演算中的规定相同。关系代数运算中的五种基本运算也可用域关系演算来表示,所以域关系演算对数据库的操作也是完备的。下面给出关系代数中的五种基本运算的域关系演算表达式。(1)关系R和S的并集RS可表示为,t1,t2,tk|R(A1:t1,A2:t2,Ak:tk)S(A1:t1,A2:t2

21、,Ak:tk)(2)关系R和S的差集RS可表示为 t1,t2,tk|R(A1:t1,A2:t2,Ak:tk)S(A1:t1,A2:t2,Ak:tk)(3)关系R和S的笛卡尔积RS可表示为 t1,t2,tr,tr+1,tr+s|(u1)(u2)(ur)(v1)(v2)(vr)(R(A1:u1,A2:u2,Ar:ur)S(B1:v1,B2:v2,Bs:vs)t1=u1t2=u2tr=urtr+1=v1tr+2=v2tr+s=vs)(4)关系R的投影运算i1,i2,ik(R)可表示为 t1,t2,tk|(u1)(u2)(um)(R(A1:u1,A2:u2,Am:um)t1=ui1t2=ui2tik=

22、uik),(5)关系R的选择运算F(R)可表示为 t1,t2,tk|R(A1:t1,A2:t2,Ak:tk)F(A1:t1,A2:t2,Ak:tk)其中,F(A1:t1,A2:t2,Ak:tk)表示选择条件公式,由原子公式和运算符构成。元组关系演算表达式与域关系演算表达式的相互转换是容易的。由元组关系演算表达式到域关系演算表达式的转换遵循以下两条规则:(1)如果t是k元的,则引入k个域变量t1,t2,tk来替换t,用ti替换t元组的第i个分量ti。(2)对于量词(u)或(u),若u是m元的,则引入m个域变量u1,u2,um,并用(u1)(u2)(um)替代(u)和用(u1)(u2)(um)替代

23、(u)。,(1)例17.2的域关系演算表达式为 t2|STU(S#:t1,SN:t2)(u1)(u2)(SC(S#:u1,C#:C101)t1=u1)(2)例17.3的域关系演算表达式为 t2|STU(S#:t1,SN:t2)(u1)(C(C#:u1)(v1)(v2)(SC(S#:v1,C#:v2)u1=v2v1=t1)(3)例17.4的域关系演算表达式为 t1,t2,t3|SC(S#:t1,C#:t2,G:t3)t1=19205t2=C401t3=B(4)例17.5的域关系演算表达式为 t1,t2,t3|SC(S#:t1,C#:t2,G:t3)(u1)(u2)(STU(S#:u1,SN:王凡

24、),t1=u1)(v1)(C(C#:v1)v1=C201v1=t2)从以上例子可以看出在域关系演算表达式中,如果一个元组中的有些域没有使用,则可以省略。4.关系演算的安全限制 在我们给出关系的定义时,就强调指出关系是命名属性集合下元组的有限集合。这样就要求对关系施加关系运算后所得到的关系也应是有限集合。对于关系代数,由于它是在给定的关系上定义的,只要给定关系是有限的,则经关系代数运算后的关系仍然是一个有限的集合,所以关系代数运算是安全的。对于关系演算,由于它包含了逻辑非、存在量词和全称量词运算,这样可能使运算结果出现无限关系和无穷验证过程。下面我们就以元组关系演算为例来进行说明,域关系演算的情

25、况类似。,例如,t:R(t)表示集合是由不在关系R中的元组组成。当关系R的某个域是无限的,则t:R(t)是一个无限集合。由无限集合构成的关系需要使用具有无限存储容量的计算机,这是无法实现的。另外,若要判断(t)(t)和(t)(t)的真和假时,如果t的取值为无限,则要进行无穷次验证。显然这在实际中既无法实现又毫无意义。因此,必须采取一定的措施来防止关系演算出现上述情况。我们把所采取的措施称为安全限制 安全限制就是对关系演算施加限制条件,使关系演算表达式的变量在一个规定的范围内取值,从而避免无限关系和无穷次验证现象的发生。安全限制的关键在于定义一个与有关的有限符号集DOM(),使(t)的t的取值范

26、围限定在有限集合之中。DOM()的定义方法有多种。,一个常用的DOM()的定义方法是:DOM()由出现在关系中的所有符号和中出现的常量符号构成。例如,有元组演算表达式:t:R(t),其中R由图17.9给出,则DOM()定义为 DOM()=A(R)B(R)C(R)=a,b,c,d,1,2 一个安全的元组演算表达式t:(t)应满足以下条件:(1)定义一个与有关的有限符号集DOM(),这些符号由原始关系中的部分或全部符号和中出现的常量符号组成。(2)如果一个元组可使(t)为真,则这个元组的每一个分量值必属于DOM()。(3)对中的每个(u)(u)子式,如果u使(u)为真,则u的每个分量必属于DOM(

27、)。只要有一个分量值不属于DOM(),则(u)为假。,图17.9 R关系,(4)对中的每个(u)(u)子式,如果u使(u)为假,则u的每个分量也必属于DOM()。条件(3)和条件(4)保证了(u)(u)和(u)(u)子式的真假值可在有限次的运算中决定。例17.6 已知关系R和如图17.10(a)、(b)所示,计算:tR(t);tS(t)R(t)。解:定义 DOM()=A(R)B(R)C(R)=a,b,d,1,2,则R(t)三个域的笛卡尔积构成了包含R(t)的整个集合。这个集合与R的差集,即是所求,如图17.10(c)所示。定义 DOM()=A(R)B(R)C(R)A(S)B(S)C(S)=a,

28、b,d,g,c,1,2,5 则tS(t)R(t)的结果如图17.10(d)所示。,图 17.10,17.3 关系数据库语言,虽然使用前一节介绍的关系运算,可以实现对于关系数据库的操作,但这种操作需要用户把实际的操作转化为相应的关系运算,这通常是困难的。另外,关系运算还无法提供用户在进行数据操作时的一些附加功能。例如,数据定义、数据控制、数据聚合(包括关系分量上的算术平均、累加、最大值、最小值的计算)。因此发展了供用户使用的关系数据库语言。关系数据库语言是建立在关系运算的基础上,具有数据定义、数据查询、数据更新、数据控制等功能的非过程化语言。这种语言一般只要求用户说明目的和要求,而不必说明怎样去

29、做,便于用户使用。迄今为止,人们已经研究了几十种关系数据库语言。这里主要介绍结构化查询语言(SQLStructured Query Language)。,SQL是一种结构化查询语言,它是在最初使用System R数据库管理系统中的查询语言SEQUEL(Structured English Query Language)的基础上发展而来的。SQL作为关系数据库语言具有以下特点:(1)功能强。SQL集数据定义语言DDL、数据操纵语言DML和数据控制语言DCL为一体,能够完成数据库定义、数据库建立、数据库使用和数据库维护的多种功能,并且还具有保障数据安全的措施,是一种完备的、功能极强的关系数据库语言

30、。(2)简洁易学。SQL语言中仅使用了SELECT、CREATE等几个动词,便可完成核心功能。并且语法简单,类似于英语表达格式,所以易于学习和推广使用。,(3)使用方式灵活。SQL可以两种方式使用,既可以作为自含型语言供用户在终端上直接与系统进行交互,又可作为宿主型语言,嵌入某种高级语言中使用,以方便数据处理。正是由于SQL具有以上特点,所以它受到用户的普遍欢迎。SQL在1986年10月被美国国家标准局ANSI批准作为美国数据库的语言标准。此后也得到了国际标准化组织(ISO)的批准,作为国际标准。SQL的标准化产生了深远的影响,不仅各数据库产品公司相继推出各自的SQL软件或与SQL的接口软件,

31、而且一些计算机厂商还将SQL引入软件开发工具,推出了许多新型的软件开发工具。例如,Gupta Technologies公司将SQL的检索功能和Microsoft Windows的图形功能相结合,推出了第四代软件开发工具SQL Windows。从而SQL也成为了目前世界上最流行的关系数据库语言。据估计,SQL在未来相当长的一段时间内,将作为数据库的主流语言发挥其重要作用。,下面我们将从数据定义、数据操作和数据控制方面对SQL进行介绍。1)数据定义 SQL的数据定义部分包括对基本关系(基表)、视图和索引进行定义、修改和删除。(1)基表定义:SQL使用CREATE TABLE语句来定义一个表。基表定

32、义的格式为 CREAT TABLE 表名(域名1 数据类型1 NOT NULL,域名2 数据类型2 NOT NULL)IN 数据库空间名SQL的主要数据类型有以下几种:,INTEGER 二字节的二进制整数SMALLINT 一字节的二进制整数DECIMAL(m,n)十进制数,其中m规定数的位数,n规定小数位数,1m15,0n14FLOAT 四字节浮点数CHAR(n)长度为n的定长字符串,n254VARCHAR(n)变长字符串,最大长度为n,n254,选项IN 数据库空间名中,如果给出数据库空间名,则生成的基表放在给出的数据库空间中,否则放入用户专用的数据库空间。例17.7 定义图17.8中的关系

33、STU,并放入名为SAMPLE的数据空间中。解:CREATE TABLE STU(S#CHAR(6)NOT NULL,SN CHAR(10)NOT NULL,SA INTEGER NOT NULL,SD CHAR(8)NOT NULL)(2)视图定义:完成在一个或多个基表或视图上定义视图的功能。语句格式为 CREATE VIEW 视图名(域名表)AS(SELECT语句),其中,SELECT语句是SQL的查询语句。SELECT语句确定视图的域的顺序、数据类型和用于产生视图的基表和视图的名称。(域名表)选项省略时,则定义的视图中的域名和顺序与SELECT语句中的相同。例17.8 在图17.8的关系

34、STU和SC上建立一个选修了C101课程的学生成绩表视图T1。解:CREATE VIEW T1 AS SELECT S#,SN,G FROM STU,SC WHERE STU.S#=SC.S#AND SC.C#=C101,(3)索引定义:用于对基表建立索引以提供对基表的存取路径。索引定义格式为,使用索引定义语句可对基表的一个或多个域建立索引,但最多不超过16个域;ASC和DESC表示索引是按升序还是降序排列,缺省时为升序。选项UNIQUE表示索引值是惟一的,即建立索引的域中的各个域值互不相同。在不满足惟一性的域上无法建立UNIQUE索引。若无UNIQUE选项则表示建立索引的域中的域值可取相同值

35、。,PCTFREE选项表明在建立索引时为该索引所预留的自由空间百分比,缺省时为10%。索引由用户定义,但索引的使用与否由系统根据需要自动决定。例17.9 对图17.8中的关系STU的S#域建立名为SNO的索引。解:CREATE UNIQUE INDEX SNO ON STU(S#)(4)基表删除:SQL的基表删除语句完成将一个已存在的基表连同在其上所建立的所有视图和索引一起删除的功能。语句格式为 DROP TABLE 基表名 例17.10 将图17.8中的基表STU删除。解:DROP TABLE STU,(5)视图删除:完成删除一个视图的功能。视图删除语句的格式为 DROP VIEW 视图名

36、例17.11 将例17.8中的视图T1删除。解:DROP VIEW T1(6)索引删除:完成删除一个索引的功能。索引删除语句的格式为 DROP INDEX 索引名 例17.12 删除例17.9所建立的索引。解:DROP INDEX SNO,(7)基表修改:SQL提供了增加基表的域和修改域的数据类型及长度的功能。增加的域放在已有基表的右端,每个元组在新增加的域上的值为空。基表修改语句的格式为,例17.13 在基表STU上增加一个域名为性别(SE)的域,其数据类型为CHAR(4)。解:ALTER TABLE STU ADD SE CHAR(4)例17.14 将基表STU上的S#域的字符串长度改为1

37、0。解:ALTER TABLE STU MODIFY S#CHAR(10),2)数据操作 SQL的数据操纵包括数据的查询、插入、删除、修改。(1)查询。查询通常又称为检索,是数据库操作中最常用的一种操作。它的语句格式为,格式说明:SELECT后到FROM前的部分通常称为目标表,这是对查询结果的描述。ALL:将所有符合条件的元组输出,无论其值重复与否。DISTINCT:对检索出的重复元组,只输出一次。*:表示选择基表的所有域。选择域表:由一个或多个逗号分隔开的数据项组成。每个数据项可以是域名、常量、内部函数或表达式,给出输出元组在该域上的具体取值。,常用的内部函数有:AVG(DISTINCT域名

38、),求该域上的已有值的平均值。当选择DISTINCT选项时,对重复值不重复计数;SUM(DISTINCT域名),求该域上的已有值的和,当使用DISTINCT选项时,只计算不同值的和;MAX(域名)和MIN(域名)分别指出该域已有值的最大和最小值;COUNT(DISTINCT域名)计算目标表中该域不同域值的个数。在计算内部函数时,若域值为空则被忽略,若所有域值都为空值,则内部函数的返回值也为空,但COUNT的返回值为0。FROM子句:该子句给出了所查询的基表名,当使用多个基表时,中间用逗号分隔。WHERE子句:指出被选择的元组应满足的条件。,条件表示式:由含有算术运算符(+、*、/)、比较运算符

39、(=、=、=、)、逻辑运算符(AND、OR、NOT)的表达式,或是以下形式之一给出。域名 NOT NULL,域值是否为空;表达式1 NOT BETWEEN 表达式2 AND 表达式3,表达式1是否在表达式2和表达式3之间;表达式 NOT IN(目标域表),表达式的值是否是目标域表中的一个值;域名 NOT LIKE 字符串,域名是否与字符串相同。字符串中可使用通配符“”和“%”,“”表示任一字符,“%”表示任一串字符。GTOUP子句:对目标表中的元组按子句指定的域进行分组。,HAVING子句:它是GROUP的一个可选子句,用于在分组查询中指定下一层分组条件。ORDER子句:对目标表中的元组按子句

40、指定的域(这个域应出现在目标表中)进行排序。ASC指明为升序,DESC为降序。缺省为升序。在查询过程中,一般是用WHERE子句限定元组形式,然后再进行分组,最后用HAVING子句对组进行限定。SELECT语句功能丰富,使用灵活,下面举例进行说明。,例17.15 检索选修C101课程的学生名。解:SELECT SN FROM STU,SC WHERE STU.S#=SC.S#AND SC.C#=C101 例17.16 检索信息系选修 C101 课程学生的平均成绩。解:SELECT SD信息,AVG(G)FROM STU,SC WHERE STU.S#=SC.S#AND SC.C#=C101 AN

41、D SD=信息 在此例中,由于目标表内出现了内部函数AVG,所以不能再出现一般的域名SD,而要用一个常量 SD信息 代之。,例17.17 检索各系选修 C101 课程学生的平均成绩。解:SELECT SD,AVG(G)FROM STU,SC WHERE STU.S#=SC.S#AND SC.C#=C101 GROUP BY SD 例17.18 对所有学生按年龄分组,找出人数多于500的年龄组,并按年龄升序排列。解:SELECT SA,COUNT(*)FROM STU GROUP BY SA HAVING COUNT(*)500 ORDER BY SA,例17.19 在STU表中检索 信息 系王

42、姓学生情况。解:SELECT*FROM STU WHERE SN=王%AND SD=信息例17.20 检索同时选修了 C101 和 C201 课程的学生学号。解:SELECT T1.S#F ROM SC T1,SC T2 WHERE T1.C#=C101 AND T2.C#=C201 AND T1.S#=T2.S#此例是表自身的连接。为了区别连接中SC出现两次,引入T1和T2标号。标号引入使得实际连接时SC可作为两个表来使用。,例17.21 检索成绩为A的学生情况。解:SELECT*FROM STU WHERE S#IN(SELECT S#FROM SC WHERE SC.G=A)此例中是WH

43、ERE后的条件表达式中出现了另一个查询,这另一个查询称为子查询或嵌入的查询块。在有子查询嵌套的情况下,执行时先得到最内层的查询结果,逐层向外执行,最后得到要查询的值。,(2)插入。SQL的插入语句可完成插入一个元组的几个域值、插入一个元组或插入多个元组的功能。插入语句的格式为,例17.22 将学号为19205的学生所选修的课程代号为C401的课的所得成绩B插入关系SC。解:INSERT INTO SC VALUES(19205,C401,B)例17.23 将 信息 系选修 C101 课程的学生成绩单检索出来并放在表T1中。解:INSERT INTO T1,SELECT STU.S#,STU.S

44、N,SC.C#,SC.G FROM STU,SC WHERE STU.S#=SC.S#SC.C#=C101STU.SD=信息 在数据插入时,如果一个元组中存在未给出常量的数据项,则这个数据项取空值。(3)数据删除。SQL的删除语句完成表中的全部元组和部分元组的删除。其语句格式为 DELETE FROM 表名 WHERE 条件表达式 例17.24 删除SC表中的全部元组。解:DELETE FROM SC,例17.25 删除学生王凡所选修的课程代号为C201的课的所得成绩。DELETE FROM SC WHERE SC.C#=C201SC.S#=(SELECT S#FROM STU WHERE S

45、TU.SN=王凡)(4)修改。SQL的修改语句完成对元组中某些域值的修改。其语句格式为 UPDATE 表名 SET 域名1=表达式1,域名2=表达式2 WHERE 条件表达式,例17.26 将学生王凡所选修的课程代号为C201的课的所得成绩改为B。UPDATE SC SET SC.G=B WHERE SC.S#=(SELECT S#FROM STU WHERE STU.SN=王凡)SC.C#=C201 例17.27 将STU表中的学号为19205的学生年龄增加1岁。解:UPDATE STU SET STU.SA=STU.SA+1 WHERE STU.S#=19205,上述的插入、删除和修改操作

46、每次仅可对一个表实施,这样有可能破坏数据的完整性。例如,在SC表中插入一个元组时,无法保证该元组中的S#存在于表STU中;从表C中删除一个元组,也无法保证表SC中与该元组有关的记录同时被删除;修改表C中的课程代号C#,也无法保证SC表中作同样的修改。为保证数据的完整性,在SQL/DS中引入了“逻辑工作单元”(即事务)的概念,来使相关联的操作同时进行。查询、插入、删除和修改操作应用于视图时,受到一定的限制。对由单个基表导出的视图,可进行插入和修改操作,但不能进行删除操作;对由多个表导出的视图,则不允许进行插入,删除和修改操作。3)数据控制 SQL的控制功能主要包括安全性控制、一致性控制和并发控制

47、等内容。,(1)安全性控制:为了保证数据库中的数据的安全与保密,SQL采取了一系列措施,其中主要是建立了一套授权机制来防止非法用户对数据库数据的使用和破坏。SQL中的授权包括:对数据库数据和系统资源的使用和向用户授予DBA权限;对表和视图的操作;对程序的操作权。下面分别进行介绍。向用户授予或撤消对数据、资源的使用权和DBA特权。这种授权供DBA或具备DBA特权的用户使用。授权格式为,其中CONNECT是对数据库的使用权,用户被授予该权后才能进入数据库系统。RESOURCE权是用户对于PUBLIC数据库空间的使用权,用户获得RESOURCE权后可使用PUBLIC空间来建立自己的新表。对未获RES

48、OURCE权的用户,必须在DBA给他申请私用空间后,才能在私用空间中建表,在进行RESOURCE授权时,不使用IDENTIFIED子句。DBA的权限包括:授予其他用户CONNECT权、RESOURCE权和DBA特权或撤消这些授权;申请、变更和撤消数据库空间;定义、变更或删除任何用户的表、索引、视图等;对数据库的安全性、完整性控制和并发性控制;对数据库的任一基表进行各种操作,运行各个程序;对系统目录的管理。通常向用户授于DBA特权是非常谨慎的。例17.28 向名为USER1的用户授予CONNECT权,用户的口令为tty1。,解:GRANT CONNECT TO USER1 IDENTIFIED

49、BY tty1 例17.29 向名为USER1的用户授予RESOURCE权。解:GRANT RESOURCE TO USER1 撤消授权语句的格式为 REVOKE语句撤消的授权必须是通过GRANT语句授予用户的权力,但用户自己具有的权力是不能撤消的。例如基表创建者对基表拥有各种操作的权力,即使DBA也不能取消这种权力。另外,DBA的DBA特权不能被撤消。,REVOKE语句撤消的授权必须是通过GRANT语句授予用户的权力,但用户自己具有的权力是不能撤消的。例如基表创建者对基表拥有各种操作的权力,即使DBA也不能取消这种权力。另外,DBA的DBA特权不能被撤消。向用户授予或撤消对表和视图的操作权。

50、这种授权由DBA或建立表和视图的用户使用。授权语句格式为,其中操作权名表包括ALTER、INDEX、SELECT、INSERT、UPDATE域名表、DELETE六种。ALTER和INDEX操作不能用于视图。ALL指所有六种操作权。ALL不能用于视图授权,当选择TO后面的PUBLIC时所授予的操作权为所有用户共享。WITH GRANT OPTION选项的选择表明被授权的用户,可将自己得到的操作权再授予其他用户。例17.30 向名为USER1的用户授予对STU的查询和对SA修改操作权,并允许USER1将他获得的权限授予其他用户。解:GRANT SELECT,UPDATE(SA)ON STU TO

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号