第5章 关系数据库标准语言—SQL

上传人:大米 文档编号:570137735 上传时间:2024-08-02 格式:PPT 页数:121 大小:569.50KB
返回 下载 相关 举报
第5章 关系数据库标准语言—SQL_第1页
第1页 / 共121页
第5章 关系数据库标准语言—SQL_第2页
第2页 / 共121页
第5章 关系数据库标准语言—SQL_第3页
第3页 / 共121页
第5章 关系数据库标准语言—SQL_第4页
第4页 / 共121页
第5章 关系数据库标准语言—SQL_第5页
第5页 / 共121页
点击查看更多>>
资源描述

《第5章 关系数据库标准语言—SQL》由会员分享,可在线阅读,更多相关《第5章 关系数据库标准语言—SQL(121页珍藏版)》请在金锄头文库上搜索。

1、数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院第5章关系数据库标准语言SQLStillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院关系数据库标准语言SQL5.1SQL概述及特点概述及特点5.2数据定义语句数据定义语句 5.3数据查询语句数据查询语句5.4数据更新语句数据更新语句5.5嵌入式嵌入式SQL5.6数据控制机制和语句数据控制机制和语句数据库技术与应用数据库技术与应用北京邮电大学

2、北京邮电大学计算机学院计算机学院5.1 SQL5.1 SQL概述及特点概述及特点1. SQL的主要功能的主要功能(1) (1) 数据定义功能数据定义功能 定义关系数据库的模式、外模式和内模式,以实现对基本定义关系数据库的模式、外模式和内模式,以实现对基本表、视图以及索引文件的定义、修改和删除等操作。表、视图以及索引文件的定义、修改和删除等操作。(2) (2) 数据操纵功能数据操纵功能 包括数据查询和数据更新两种数据操作语句:数据查询指包括数据查询和数据更新两种数据操作语句:数据查询指对数据库中的数据查询、统计、分组、排序操作;数据更新对数据库中的数据查询、统计、分组、排序操作;数据更新指数据的

3、插入、删除、修改等数据维护操作。指数据的插入、删除、修改等数据维护操作。(3) (3) 数据控制功能数据控制功能 通过对数据库用户的授权和收权命令来实现有关数据的存通过对数据库用户的授权和收权命令来实现有关数据的存取控制,以保证数据库的安全性。取控制,以保证数据库的安全性。数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院2. SQL的特点 (1) SQL(1) SQL具有自含式和嵌入式两种形式。具有自含式和嵌入式两种形式。(2) SQL(2) SQL具有语言简洁、易学易用的特点。具有语言简洁、易学易用的特点。(3) SQL(3) SQL支持三级模式结构。支持三级模式

4、结构。 全体基本表构成了数据库的模式。全体基本表构成了数据库的模式。 视图和部分基本表构成了数据库的外模式。视图和部分基本表构成了数据库的外模式。 数据库的存储文件和它们的索引文件构成了关系数据库的数据库的存储文件和它们的索引文件构成了关系数据库的内模式。内模式。数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院nSQL功能极强,完成核心功能只用了9个动词。数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院SQL视图视图2视图视图1基本表基本表2基本表基本表1基本表基本表3基本表基本表4存储文件存储文件2存储文件存储文件1外模式外模式模模式式

5、内模式内模式SQL支持关系数据库三级模式结构数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院5.2 数据定义语句5.2.1 5.2.1 基本表的定义和维护基本表的定义和维护1. 1. 定义基本表定义基本表定义基本表语句的一般格式为:定义基本表语句的一般格式为: CREATE TABLE CREATE TABLE 库名库名 表名表名( ( 列名数据类型列名数据类型 列级完整性约束条件列级完整性约束条件 , 列名数据类型列名数据类型 列级完整性约束条件列级完整性约束条件 ,nn ,表级完整性约束条件,表级完整性约束条件 ,n )n );数据库技术与应用数据库技术与应用北

6、京邮电大学北京邮电大学计算机学院计算机学院类型表示类型表示类型说明类型说明数值型数值型数据数据SMALLINT半字长二进制整数。半字长二进制整数。15bits数据数据INTEGER或或INT全字长(四字长)整数。全字长(四字长)整数。31bits数据数据DECIMAL(p,q)十进制数,共十进制数,共p位,其中小数点后位,其中小数点后q位。位。0qp,q=0时可省略不写时可省略不写FLOAT双字长浮点数双字长浮点数字符型字符型数据数据CHARTER(n)或或CHAR(n)长度为长度为n的定长字符串的定长字符串VARCHAR(n)最大长度为最大长度为n的变长字符串的变长字符串特殊数据类型特殊数据

7、类型GRAPHIC(n)长度为长度为n的定长图形字符串的定长图形字符串VARGRAPHIC(n)最大长度为最大长度为n的变长图形字符串的变长图形字符串日期时日期时间型间型DATE日期型,格式为日期型,格式为YYYY-MM-DDTIME时间型,格式为时间型,格式为HH.MM.SSTIMESTAMP日期加时间日期加时间(1) SQL(1) SQL支持的数据类型支持的数据类型数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院(2)列级完整性的约束条件针对属性值设置的限制条件。针对属性值设置的限制条件。1) NOT NULL1) NOT NULL或或NULLNULL约束。约束

8、。NOT NULLNOT NULL约束不允许字段值为空,而约束不允许字段值为空,而NULLNULL约束允许字段值为空。约束允许字段值为空。2) UNIQUE2) UNIQUE约束。惟一性约束,即不允许列中出现重复的属性值。约束。惟一性约束,即不允许列中出现重复的属性值。3) DEFAULT3) DEFAULT约束。默认值约束。约束。默认值约束。 DEFAULT约束名约束名默认值默认值FOR列名列名4) CHECK4) CHECK约束。检查约束。约束。检查约束。CONSTRAINT约束名约束名CHECK (约束条件表达式约束条件表达式)数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算

9、机学院计算机学院(3) 表级完整性约束条件表级完整性约束条件 涉及到关系中多个列的限制条件。涉及到关系中多个列的限制条件。1) UNIQUE1) UNIQUE约束。惟一性约束。约束。惟一性约束。2) PRIMARY KEY2) PRIMARY KEY约束。定义主码,保证惟一性和非空性。约束。定义主码,保证惟一性和非空性。 CONTRAINT CONTRAINT约束名约束名PRIMARY KEY CLUSTERED (PRIMARY KEY CLUSTERED (列组列组) )3) FOREIGN KEY3) FOREIGN KEY约束。用于定义参照完整性。约束。用于定义参照完整性。 CONTR

10、AINT CONTRAINT约束名约束名FOREIGN KEY(FOREIGN KEY(外码外码) ) REFERENCES REFERENCES被参照表名被参照表名( (与外码对应的主码名与外码对应的主码名) )数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院 CREATE TABLE CREATE TABLE 学生学生( (学号学号 CHAR(5) NOT NULL UNIQUE CHAR(5) NOT NULL UNIQUE, 姓名姓名 CHAR(8) NOT NULL CHAR(8) NOT NULL,年龄年龄 SMALLINT SMALLINT, 性别性别

11、 CHAR(2) CHAR(2),所在系所在系 CHAR(20) CHAR(20), DEFAULT C1 20 FOR DEFAULT C1 20 FOR 年龄,年龄, CONSTRAINT C2 CHECK( CONSTRAINT C2 CHECK(性别性别 IN ( IN (男男,女女); 建立基本表:建立基本表: 学生学生(学号,姓名,年龄,性别,所在系学号,姓名,年龄,性别,所在系); 课程课程(课程号,课程名,先行课课程号,课程名,先行课); 选课选课(学号,课程号,成绩学号,课程号,成绩).数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院CREATET

12、ABLE课程课程(课程号课程号CHAR(5)PRIMARYKEY,课程名课程名CHAR(20),先行课先行课CHAR(5);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院CREATETABLE选课选课(学号学号CHAR(5),课程号课程号CHAR(5),成绩成绩SMALLINT,CONSTRAINTC3CHECK(成绩成绩BETWEEN0AND100),CONSTRAINTC4PRIMARYKEY(学号,课程号学号,课程号),CONSTRAINTC5FOREIGNKEY(学号学号)REFERENCES学生学生(学号学号),CONSTRAINTC6FOREIGNKE

13、Y(课程号课程号)REFERENCES课程课程(课程号课程号);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院实体完整性定义实体完整性定义n关系模型的实体完整性CREATETABLE中用PRIMARYKEY定义n单属性构成的码有两种说明方法定义为列级约束条件定义为表级约束条件n对多个属性构成的码只有一种说明方法定义为表级约束条件数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院实体完整性定义实体完整性定义(续续)例将Student表中的Sno属性定义为码(1)在列级定义主码在列级定义主码CREATETABLEStudent(SnoCHAR

14、(9)PRIMARYKEY,SnameCHAR(20)NOTNULL,SsexCHAR(2),SageSMALLINT,SdeptCHAR(20);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院实体完整性定义实体完整性定义(续续)(2)在表级定义主码在表级定义主码CREATETABLEStudent(SnoCHAR(9),SnameCHAR(20)NOTNULL,SsexCHAR(2),SageSMALLINT,SdeptCHAR(20),PRIMARYKEY(Sno);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院实体完整性定义实体

15、完整性定义(续续)例将SC表中的Sno,Cno属性组定义为码CREATETABLESC(SnoCHAR(9)NOTNULL,CnoCHAR(4)NOTNULL,GradeSMALLINT,PRIMARYKEY(Sno,Cno)/*只能在表级定义主码*/);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院实体完整性检查和违约处理实体完整性检查和违约处理n插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:1.检查主码值是否唯一,如果不唯一则拒绝插入或修改2.检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改数据库技术与应用数据库技术与

16、应用北京邮电大学北京邮电大学计算机学院计算机学院实体完整性检查和违约处理实体完整性检查和违约处理(续续)n检查记录中主码值是否唯一的一种方法是进行全表扫描数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院实体完整性检查和违约处理实体完整性检查和违约处理(续续)n索引数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院参照完整性定义参照完整性定义n关系模型的参照完整性定义在CREATETABLE中用FOREIGNKEY短语定义哪些列为外码用REFERENCES短语指明这些外码参照哪些表的主码数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学

17、计算机学院计算机学院参照完整性定义参照完整性定义(续续)例如,关系SC中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码和Course表的主码例定义SC中的参照完整性CREATETABLESC(SnoCHAR(9)NOTNULL,CnoCHAR(4)NOTNULL,GradeSMALLINT,PRIMARYKEY(Sno,Cno),/*在表级定义实体完整性*/FOREIGNKEY(Sno)REFERENCESStudent(Sno),/*在表级定义参照完整性*/FOREIGNKEY(Cno)REFERENCESCourse(C

18、no)/*在表级定义参照完整性*/);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院参照完整性检查和违约处理参照完整性检查和违约处理可能破坏参照完整性的情况及违约处理被参照表(例如Student)参照表(例如SC)违约处理可能破坏参照完整性 插入元组拒绝可能破坏参照完整性 修改外码值拒绝删除元组 可能破坏参照完整性拒绝/级连删除/设置为空值修改主码值 可能破坏参照完整性拒绝/级连修改/设置为空值数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院违约处理违约处理n参照完整性违约处理1.拒绝(NOACTION)执行默认策略2.级联(CASCA

19、DE)操作3.设置为空值(SET-NULL)对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院违约处理违约处理(续续)例显式说明参照完整性的违约处理示例CREATETABLESC(SnoCHAR(9)NOTNULL,CnoCHAR(4)NOTNULL,GradeSMALLINT,PRIMARYKEY(Sno,Cno),FOREIGNKEY(Sno)REFERENCESStudent(Sno)ONDELETECASCADE/*级联删除SC表中相应的元组*/ONUPDATECASCADE,/*级联更新SC表中相应

20、的元组*/FOREIGNKEY(Cno)REFERENCESCourse(Cno)ONDELETENOACTION/*当删除course表中的元组造成了与SC表不一致时拒绝删除*/ONUPDATECASCADE/*当更新course表中的cno时,级联更新SC表中相应的元组*/);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院用户定义的完整性用户定义的完整性n用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求nRDBMS提供,而不必由应用程序承担数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院属性上的约束条件的定义属性上的约束

21、条件的定义nCREATETABLE时定义列值非空(NOTNULL)列值唯一(UNIQUE)检查列值是否满足一个布尔表达式(CHECK)数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院属性上的约束条件的定义属性上的约束条件的定义(续续)n1.不允许取空值例在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。CREATETABLESC(SnoCHAR(9)NOTNULL,CnoCHAR(4)NOTNULL,GradeSMALLINTNOTNULL,PRIMARYKEY(Sno,Cno),/*如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值,则在列级

22、不允许取空值的定义就不必写了*/);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院属性上的约束条件的定义属性上的约束条件的定义(续续)n2.列值唯一例建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码CREATETABLEDEPT(DeptnoNUMERIC(2),DnameCHAR(9)UNIQUE,/*要求Dname列值唯一*/LocationCHAR(10),PRIMARYKEY(Deptno);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院属性上的约束条件的定义属性上的约束条件的定义(续续)n3

23、.用CHECK短语指定列值应该满足的条件例7Student表的Ssex只允许取“男”或“女”。CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,SnameCHAR(8)NOTNULL,SsexCHAR(2)CHECK(SsexIN(男,女),/*性别属性Ssex只允许取男或女*/SageSMALLINT,SdeptCHAR(20);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理n插入元组或修改属性的值时,RDBMS检

24、查属性上的约束条件是否被满足n如果不满足则操作被拒绝执行数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院元组上的约束条件的定义元组上的约束条件的定义n在CREATETABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制n同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院元组上的约束条件的定义元组上的约束条件的定义(续续)例9当学生的性别是男时,其名字不能以Ms.打头。CREATETABLEStudent(SnoCHAR(9),SnameCHAR(8)NOTN

25、ULL,SsexCHAR(2),SageSMALLINT,SdeptCHAR(20),PRIMARYKEY(Sno),CHECK (Ssex=女女 OR Sname NOT LIKE Ms.%)/*定义了元组中Sname和Ssex两个属性值之间的约束条件*/);性别是女性的元组都能通过该项检查,因为Ssex=女成立;当性别是男性时,要通过检查则名字一定不能以Ms.打头数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理n插入元组或修改属性的值时,RDB

26、MS检查元组上的约束条件是否被满足n如果不满足则操作被拒绝执行数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院完整性约束命名子句完整性约束命名子句nCONSTRAINT约束CONSTRAINTPRIMARYKEY短语|FOREIGNKEY短语|CHECK短语数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院完整性约束命名子句完整性约束命名子句(续续)例建立学生登记表Student,要求学号在9000099999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。CREATETABLEStudent(SnoNUMERIC(6)CON

27、STRAINTC1CHECK(SnoBETWEEN90000AND99999),SnameCHAR(20)CONSTRAINTC2NOTNULL,SageNUMERIC(3)CONSTRAINTC3CHECK(Sage30),SsexCHAR(2)CONSTRAINTC4CHECK(SsexIN(男,女),CONSTRAINTStudentKeyPRIMARYKEY(Sno);在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1、C2、C3、C4四个列级约束。数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院2.2.修改基本表和删

28、除基本表修改基本表和删除基本表 ALTER TABLE表名表名 ADD(新列名新列名数据类型数据类型完整性约束完整性约束 ,n) DROP完整性约束名完整性约束名 MODIFY(列名列名数据类型数据类型,n);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院n向Student表增加“入学时间”列,其数据类型为日期型。ALTERTABLEStudentADDS_entranceDATE;不论基本表中原来是否已有数据,新增加的列一律为空值。n增加课程名称必须取唯一值的约束条件。ALTERTABLECourseADDUNIQUE(Cname);数据库技术与应用数据库技术与

29、应用北京邮电大学北京邮电大学计算机学院计算机学院例修改表Student中的约束条件,要求学号改为在900000999999之间,年龄由小于30改为小于40可以先删除原来的约束条件,再增加新的约束条件ALTERTABLEStudentDROPCONSTRAINTC1;ALTERTABLEStudentADDCONSTRAINTC1CHECK(SnoBETWEEN900000AND999999),ALTERTABLEStudentDROPCONSTRAINTC3;ALTERTABLEStudentADDCONSTRAINTC3CHECK(Sage (大于)、(大于)、 (小于)、(小于)、=(大于

30、等于)、(大于等于)、!=!=(不等于)、(不等于)、(小于大于)、(小于大于)、!(不(不大于)和大于)和 ! !、=、9090;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院(2) 自身连接自身连接例如,课程表中的先行课是在上学期应开设的,先行课的例如,课程表中的先行课是在上学期应开设的,先行课的先行课,即间接先行课应提前一学年开设。如果求查询某先行课,即间接先行课应提前一学年开设。如果求查询某门课的间接先行课或全部课程的间接先行课,就需要对课门课的间接先行课或全部课程的间接先行课,就需要对课程表进行自身连接。程表进行自身连接。 课程号课程号课程名课程名先行课

31、先行课C1计算机引论计算机引论C2PASCAL语言语言C1C3数据结构数据结构C2C4数据库数据库C3C5软件工程软件工程C4课程的先行关系链为:课程的先行关系链为:C5C4C3C2C1,课程的间接关系链为:课程的间接关系链为:C5C3C1。 数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院课程号课程号课程名课程名先行课先行课课程号课程号课程名课程名先行课先行课C1计算机引论计算机引论C1计计 算算 机机 引引论论C2Pascal语言语言C1C2Pascal语言语言C1C3数据结构数据结构C2C3数据结构数据结构C2C4数据库数据库C3C4数据库数据库C3C5软件工

32、程软件工程C4C5软件工程软件工程C4A.课程号课程号A.课程名课程名B.先行课先行课C2Pascal语言语言C3数据结构数据结构C1C4数据库数据库C2C5软件工程软件工程C3AB结果【例】查询每一门课的间接先行课。SELECTA.课程号,A.课程名,B.先行课FROM课程A,课程BWHEREA.先行课=B.课程号数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院关系代数:n外连接如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫做外连接(OUTERJOIN)。n左外连接如果只把左边关系R中要舍弃的元组保留就叫做左外连接(LEFTOU

33、TERJOIN或LEFTJOIN)n右外连接如果只把右边关系S中要舍弃的元组保留就叫做右外连接(RIGHTOUTERJOIN或RIGHTJOIN)。数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院loan-numberamountL-170L-230L-260300040001700customer-nameloan-numberJonesSmithHayesL-170L-230L-155branch-nameDowntownRedwoodPerryridge关系loan关系borrower例:数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机

34、学院内连接内连接loan Borrowerloan borrower 左外连接左外连接loan-numberamountL-170L-23030004000customer-nameJonesSmithbranch-nameDowntownRedwoodloan-numberamountL-170L-230L-260300040001700customer-nameJonesSmithnullbranch-nameDowntownRedwoodPerryridge数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院右外连接右外连接 loanborrowerloan-nu

35、mberamountL-170L-230L-15530004000nullcustomer-nameJonesSmithHayesloan-numberamountL-170L-230L-260L-155300040001700nullcustomer-nameJonesSmithnullHayesloan borrower 全外连接全外连接branch-nameDowntownRedwoodnullbranch-nameDowntownRedwoodPerryridgenull数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院(3) 外部连接外部连接左外部连接操作是

36、在结果集中保留连接表达式左表中的非匹配记录;左外部连接操作是在结果集中保留连接表达式左表中的非匹配记录;右外部连接操作是在结果集中保留连接表达式右表中的非匹配记录。右外部连接操作是在结果集中保留连接表达式右表中的非匹配记录。外部连接符号为外部连接符号为“*=”,右外部连接符号为,右外部连接符号为“=*”。外部连接中不匹。外部连接中不匹配的分量用配的分量用NULL表示。表示。职工职工号号姓名姓名性别性别年龄年龄所在部所在部门门部门部门号号部门名部门名称称电话电话1010李勇李勇男男201111生产科生产科5661011刘晨刘晨女女1912计划科计划科5781012王敏王敏女女221213一车间一

37、车间4671014张立张立男男211314科研所科研所职工表职工表 部门表部门表 数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院连接的结果集连接的结果集 职工号职工号姓名姓名性别性别年龄年龄所在部门所在部门部门名称部门名称电话电话1010李勇李勇男男2011生产科生产科5661012王敏王敏女女2212计划科计划科5781014张立张立男男2113一车间一车间467职工号职工号姓名姓名性别性别年龄年龄所在部门所在部门部门名称部门名称电话电话1010李勇李勇男男2011生产科生产科5661011刘晨刘晨女女191012王敏王敏女女2212计划科计划科5781014张

38、立张立男男2113一车间一车间467内连接的结果集内连接的结果集 左外部连接的结果集左外部连接的结果集数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院内连接:内连接: SELECT SELECT 职工职工.*.*,部门名称,电话,部门名称,电话 FROM FROM 职工,部门职工,部门 WHERE WHERE 职工职工. .所在部门所在部门= = 部门部门. .部门号;部门号;左外部连接:左外部连接: SELECT SELECT 职工职工.*.*,部门名称,电话,部门名称,电话 FROM FROM 职工,部门职工,部门 WHERE WHERE 职工职工. .所在部门

39、所在部门*= *= 部门部门. .部门号;部门号;右外部连接:右外部连接: SELECT SELECT 职工职工.*.*,部门名称,电话,部门名称,电话 FROM FROM 职工,部门职工,部门 WHERE WHERE 职工职工. .所在部门所在部门 =* =*部门部门. .部门号;部门号; 用SQL表达职工和部门之间的内连接、左外部连接和右外部连接的语句数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院3. 3. 嵌套查询嵌套查询嵌套查询嵌套查询(1)使用使用IN操作符的嵌套查询操作符的嵌套查询【例例5-20】求选修了高等数学的学生学号和姓名。求选修了高等数学的学生

40、学号和姓名。 SELECT SELECT 学号,姓名学号,姓名 FROM FROM 学生学生 WHERE WHERE 学号学号 IN ( SELECT IN ( SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号 IN ( SELECT IN ( SELECT 课程号课程号 FROM FROM 课程课程 WHERE WHERE 课程名课程名=高等数学高等数学 ) );该题也可以使用下面的连接查询表达。该题也可以使用下面的连接查询表达。 SELECT SELECT 学生学生. .学号,姓名学号,姓名 FROM FROM 学生,课程,选课学生,课程,选课 W

41、HERE WHERE 学生学生. .学号学号= =课程课程. .学号学号 AND AND 课程课程. .课程号课程号= =选课选课. .课程号课程号 AND AND 课程课程. .课程名课程名=高等数学高等数学 ;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院(2) 使用比较符的嵌套查询使用比较符的嵌套查询【例例】求求C1课程的成绩高于张三的学生学号和成绩。课程的成绩高于张三的学生学号和成绩。 SELECT SELECT 学号,成绩学号,成绩 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C1 AND =C1 AND 成绩成绩 ( ( SEL

42、EC SELEC 成绩成绩 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C1AND =C1AND 学号学号= = (SELECT (SELECT 学号学号 FROM FROM 学生学生 WHERE WHERE 姓名姓名=张三张三);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院(3) (3) 使用使用ANYANY或或ALLALL操作符的嵌套查询操作符的嵌套查询格式为:字段比较符格式为:字段比较符ANY|ALLANY|ALL子查询子查询操作符操作符语意语意ANY大于子查询结果中的某个值,即表示大于查询结果中最小值大于子查询结果中的某个值,即表

43、示大于查询结果中最小值ALL大于子查询结果中的所有值,即表示大于查询结果中最大值大于子查询结果中的所有值,即表示大于查询结果中最大值ANY小于子查询结果中的某个值,即表示小于查询结果中最大值小于子查询结果中的某个值,即表示小于查询结果中最大值=ANY大于等于子查询结果中的某个值,即表示大于等于结果集中最小值大于等于子查询结果中的某个值,即表示大于等于结果集中最小值=ALL大于等于子查询结果中的所有值,即表示大于等于结果集中最大值大于等于子查询结果中的所有值,即表示大于等于结果集中最大值=ANY小于等于子查询结果中的某个值,即表示小于等于结果集中最大值小于等于子查询结果中的某个值,即表示小于等于

44、结果集中最大值=ALL小于等于子查询结果中的所有值,即表示小于等于结果集中最小值小于等于子查询结果中的所有值,即表示小于等于结果集中最小值=ANY等于子查询结果中的某个值,即相当于等于子查询结果中的某个值,即相当于IN=ALL等于子查询结果中的所有值等于子查询结果中的所有值(通常没有实际意义通常没有实际意义)!=(或或)ANY不等于子查询结果中的某个值,不等于子查询结果中的某个值,!=(或或)ALL不等于子查询结果中的任何一个值,即相当于不等于子查询结果中的任何一个值,即相当于NOT IN数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院【例】【例】求其他系中比计算机

45、系某一学生年龄小的学生。求其他系中比计算机系某一学生年龄小的学生。SELECT *SELECT * FROM FROM 学生学生 WHERE WHERE 年龄年龄 ANY (SELECT ANY (SELECT 年龄年龄 FROM FROM 学生学生 WHERE WHERE 所在系所在系=计算机系计算机系) AND ) AND 所在系所在系计算机系计算机系;【例】【例】求其他系中比计算机系学生年龄都小的学生。求其他系中比计算机系学生年龄都小的学生。SELECT *SELECT * FROM FROM 学生学生 WHERE WHERE 年龄年龄 ALL (SELECT ALL (SELECT 年

46、龄年龄 FROM FROM 学生学生 WHERE WHERE 所在系所在系=计算机系计算机系) AND ) AND 所在系所在系 计算机系计算机系 ;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院(4) (4) 使用使用EXISTSEXISTS操作符的嵌套查询操作符的嵌套查询【例】求选修了【例】求选修了C2C2课程的学生姓名。课程的学生姓名。SELECT SELECT 姓名姓名 FROM FROM 学生学生 WHERE EXISTS (SELECT * FROM WHERE EXISTS (SELECT * FROM 选课选课 WHERE WHERE 学生学生.

47、.学号学号= =学号学号 AND AND 课程号课程号=C2)=C2);【例】求没有选修【例】求没有选修C2C2课程的学生姓名。课程的学生姓名。SELECT SELECT 姓名姓名 FROM FROM 学生学生 WHERE NOT EXISTS (SELECT * FROM WHERE NOT EXISTS (SELECT * FROM 选课选课 WHERE WHERE 学生学生. .学号学号= =学号学号 AND AND 课程号课程号=C2)=C2);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院【例】【例】查询选修了全部课程的学生的姓名。查询选修了全部课程的学

48、生的姓名。SELECT SELECT 姓名姓名 FROM FROM 学生学生 WHERE NOT EXISTS WHERE NOT EXISTS (SELECT * FROM (SELECT * FROM 课程课程 WHERE NOT EXISTS WHERE NOT EXISTS (SELECT *(SELECT * FROM FROM 选课选课 WHERE WHERE 学生学生. .学号学号= =学号学号 AND AND 课程课程. .课程号课程号= =课程号课程号);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院【例例】求求至至少少选选修修了了学学号号为为“

49、S2”“S2”的的学学生生所所选选修修的的全全部部课课程程的的学学生学号和姓名。生学号和姓名。 SELECT SELECT 学号,姓名学号,姓名 FROM FROM 学生学生 WHERE NOT EXISTS (SELECT * FROM WHERE NOT EXISTS (SELECT * FROM 选课选课 选课选课1 1 WHERE WHERE 选课选课1.1.学号学号=S2 AND NOT EXISTS =S2 AND NOT EXISTS (SELECT * FROM (SELECT * FROM 选课选课 选课选课2 2 WHERE WHERE 学生学生. .学号学号= =选课选课

50、2.2.学号学号 AND AND 选课选课2 .2 .课程号课程号= =选课选课1.1.课程号课程号) );数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院n不同形式的查询间的替换一些带EXISTS或NOTEXISTS谓词的子查询不能被其他形式的子查询等价替换所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换n用EXISTS/NOTEXISTS实现全称量词(难点)SQL语言中没有全称量词(Forall)可以把带有全称量词的谓词转换为等价的带有存在量词的谓词:(x)P(x(P)数据库技术与应用数据库技术与应用北京邮电大学北京

51、邮电大学计算机学院计算机学院4.组合查询【例】求选修了【例】求选修了C1C1课程或选修了课程或选修了C2C2课程的学生学号。课程的学生学号。SELECT SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C1=C1 UNION UNION SELECT SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C2=C2【例】求选修【例】求选修C1C1课程,并且也选修课程,并且也选修C2C2课程的学生学号。课程的学生学号。SELECT SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号

52、课程号=C1=C1 INTERSECT INTERSECT SELECT SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C2=C2;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院【例】求选修了【例】求选修了C1C1课程但没有选修课程但没有选修C2C2课程的学生学号。课程的学生学号。SELECT SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C1=C1 MINUS MINUS SELECT SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课

53、程号=C2=C2;本例也可以用下面的本例也可以用下面的EXISTS嵌套查询表示。嵌套查询表示。SELECT SELECT 学号学号 FROM FROM 选课选课 选课选课1 1 WHERE WHERE 课程号课程号=C1 AND NOT EXISTS=C1 AND NOT EXISTS (SELECT (SELECT 学号学号 FROM FROM 选课选课 选课选课2 2 WHERE WHERE 选课选课1.1.学号学号= =选课选课2.2.学号学号 AND AND 选课选课2.2.课程号课程号=C2)=C2);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院nGR

54、OUPBY子句分组:n细化聚集函数的作用对象未对查询结果分组,聚集函数将作用于整个查询结果对查询结果分组后,聚集函数将分别作用于每个组作用对象是查询的中间结果表按指定的一列或多列值分组,值相等的为一组5.使用分组和SQL函数查询数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院函数函数功能功能AVG(数值表达式数值表达式)求与字段相关的数值表达式的平均值求与字段相关的数值表达式的平均值SUM(数值表达式数值表达式)求与字段相关的数值表达式的和值求与字段相关的数值表达式的和值MIN(字段表达式字段表达式)求字段表达式的最小值求字段表达式的最小值MAX(字段表达式字段表达

55、式)求字段表达式的最大值求字段表达式的最大值COUNT(*|字段字段)求记录行数求记录行数(*),或求不是,或求不是NULL的字段的行数的字段的行数【例】求学生的总人数。【例】求学生的总人数。 SELECT COUNT (*)SELECT COUNT (*) FROM FROM 学生;学生;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院【例】求选修了课程的学生人数。【例】求选修了课程的学生人数。 SELECT COUNT(DISTINCT SELECT COUNT(DISTINCT 学号学号) ) FROM FROM 选课;选课;【例】求课程和选修该课程的人数。【

56、例】求课程和选修该课程的人数。 SELECT SELECT 课程号,课程号,COUNT(COUNT(学号学号) ) FROM FROM 选课选课 GROUP BY GROUP BY 课程号;课程号;【例】求选修课超过【例】求选修课超过3 3门课的学生学号。门课的学生学号。 SELECT SELECT 学号学号 FROM FROM 选课选课 GROUP BY GROUP BY 学号学号 HAVING COUNT(*)3 HAVING COUNT(*)3; 数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院nHAVING短语与WHERE子句的区别:作用对象不同WHERE子

57、句作用于基表或视图,从中选择满足条件的元组HAVING短语作用于组,从中选择满足条件的组。数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院5.4 数据更新语句5.4.1 5.4.1 数据插入语句数据插入语句1. 1. 使用常量插入单个元组使用常量插入单个元组格式为:格式为: INSERT INSERT INTO INTO表名表名(属性列属性列1 1 ,属性列,属性列2 2) VALUES ( VALUES (常量常量1 1 ,常量,常量2 2 ) );数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院【例】将一个新学生记录【例】将一个新学生

58、记录( (学号:学号:9801098010,姓名:,姓名:张三张三,年龄:年龄:2020,所在系:,所在系:计算机系计算机系 ) )插入到学生表中。插入到学生表中。INSERTINSERTINTO INTO 学生学生VALUES (98010VALUES (98010,张三张三,2020,计算机系计算机系);【例】插入一条选课记录【例】插入一条选课记录( (学号:学号:9801198011,课程号:,课程号:C10C10,成绩,成绩不详不详) )。 INSERTINSERT INTO INTO 选课选课 ( (学号,课程号学号,课程号) ) VALUES (98011 VALUES (9801

59、1,C10)C10);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院2. 在表中插入子查询的结果集INSERTINSERT INTO INTO表名表名(属性列属性列1 1 ,属性列,属性列2 2) 子查询;子查询;【例】【例】求每个系学生的平均年龄,把结果存入数据库中。求每个系学生的平均年龄,把结果存入数据库中。CREATE TABLE CREATE TABLE 系平均年龄系平均年龄 ( (系名称系名称CHAR(20)CHAR(20), 平均年龄平均年龄SMALLINT)SMALLINT); INSERT INSERT INTO INTO 系平均年龄系平均年龄 S

60、ELECT SELECT 所在系,所在系,AVG(ALLAVG(ALL年龄年龄) ) FROM FROM 学生学生 GROUP BY GROUP BY 所在系;所在系;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院5.4.2 5.4.2 数据修改语句数据修改语句UPDATEUPDATE表名表名SETSET列名列名= =表达式表达式 ,列名,列名= =表达式表达式,nnWHEREWHERE条件条件 ;【例】将学生表中全部学生的年龄加上【例】将学生表中全部学生的年龄加上2 2岁。岁。UPDATE UPDATE 学生学生 SET SET 年龄年龄= =年龄年龄+2+2;

61、【例】将选课表中的数据库课程的成绩乘以【例】将选课表中的数据库课程的成绩乘以1.21.2。UPDATE UPDATE 选课选课 SET SET 成绩成绩= = 成绩成绩*1.2*1.2 WHERE WHERE 课程号课程号= (SELECT = (SELECT 课程号课程号 FROM FROM 课程课程 WHERE WHERE 课程名课程名= = 数据库数据库 ) );数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院5.4.35.4.3数据删除语句数据删除语句 DELETEDELETE FROM FROM表名表名 WHERE WHERE条件条件 ;【例】删除艺术系的

62、学生记录及选课记录。【例】删除艺术系的学生记录及选课记录。 DELETEDELETE FROM FROM 选课选课 WHERE WHERE 学号学号 IN (SELECT IN (SELECT 学号学号 FROM FROM 学生学生 WHERE WHERE 所在系所在系=艺术系艺术系); DELETE DELETE FROM FROM 学生学生 WHERE WHERE 所在系所在系=艺术系艺术系 ;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院5.5 5.5 视视视视 图图图图视图的特点n虚表,是从一个或几个基本表(或视图)导出的表n只存放视图的定义,不存放视图对

63、应的数据n基表中的数据发生变化,从视图中查询出的数据也随之改变数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院视视视视 图图图图基于视图的操作n查询n删除n受限更新n定义基于该视图的新视图数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院一、建立视图一、建立视图一、建立视图一、建立视图n语句格式CREATEVIEW(,)ASWITHCHECKOPTION;n组成视图的属性列名:全部省略或全部指定n子查询不允许含有ORDERBY子句和DISTINCT短语数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院 建立视图(续

64、)建立视图(续)建立视图(续)建立视图(续)nRDBMS执行CREATEVIEW语句时只是把视图定义存入数据字典,并不执行其中的SELECT语句。n在对视图查询时,按视图的定义从基本表中将数据查出。数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院建立视图(续)建立视图(续)例建立信息系学生的视图。CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept=IS;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院建立视图(续)建立视图(续)建立视图(续)建立视图(续)例建立信

65、息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生。CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept=ISWITHCHECKOPTION;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院建立视图(续)建立视图(续)建立视图(续)建立视图(续)对IS_Student视图的更新操作:n修改操作:自动加上Sdept=IS的条件n删除操作:自动加上Sdept=IS的条件n插入操作:自动检查Sdept属性值是否为IS如果不是,则拒绝该插入操作如果没有提供Sdept属性值,则自动

66、定义Sdept为IS数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院建立视图(续)建立视图(续)建立视图(续)建立视图(续)n基于多个基表的视图例建立信息系选修了1号课程的学生视图。CREATEVIEWIS_S1(Sno,Sname,Grade)ASSELECTStudent.Sno,Sname,GradeFROMStudent,SCWHERESdept=ISANDStudent.Sno=SC.SnoANDSC.Cno=1;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院建立视图(续)建立视图(续)建立视图(续)建立视图(续)n基于视图的

67、视图n例建立信息系选修了1号课程且成绩在90分以上的学生的视图。CREATEVIEWIS_S2ASSELECTSno,Sname,GradeFROMIS_S1WHEREGrade=90;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院建立视图(续)建立视图(续)n带表达式的视图例定义一个反映学生出生年份的视图。CREATEVIEWBT_S(Sno,Sname,Sbirth)ASSELECTSno,Sname,2000-SageFROMStudent;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院建立视图(续)建立视图(续)建立视图(续)

68、建立视图(续)n分组视图例将学生的学号及他的平均成绩定义为一个视图假设SC表中“成绩”列Grade为数字型CREATVIEWS_G(Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSno;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院 建立视图(续)建立视图(续)建立视图(续)建立视图(续)n不指定属性列例将Student表中所有女生记录定义为一个视图CREATEVIEWF_Student(F_Sno,name,sex,age,dept)ASSELECT*FROMStudentWHERESsex=女;缺 点 : 修 改 基

69、表 Student的 结 构 后 , Student表 与F_Student视图的映象关系被破坏,导致该视图不能正确工作。数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院二、删除视图二、删除视图n语句的格式:DROPVIEW;该语句从数据字典中删除指定的视图定义如果该视图上还导出了其他视图,使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除删除基表时,由该基表导出的所有视图定义都必须显式地使用DROPVIEW语句删除数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院删除视图删除视图(续)续)例删除视图BT_S:DROPVI

70、EWBT_S;删除视图IS_S1:DROPVIEWIS_S1;拒绝执行级联删除:DROPVIEWIS_S1CASCADE;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院查询视图查询视图n用户角度:查询视图与查询基本表相同nRDBMS实现视图查询的方法视图消解法(ViewResolution)进行有效性检查转换成等价的对基本表的查询执行修正后的查询数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院查询视图(续)查询视图(续)例在信息系学生的视图中找出年龄小于20岁的学生。SELECTSno,SageFROMIS_StudentWHERESa

71、ge20;IS_Student视图的定义(参见视图定义例1)数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院查询视图(续)查询视图(续)视图消解转换后的查询语句为:SELECTSno,SageFROMStudentWHERESdept=ISANDSage=90;S_G视图的子查询定义:CREATEVIEWS_G(Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSno;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院查询转换查询转换错误:SELECTSno,AVG(Grade)FROMSCWHEREA

72、VG(Grade)=90GROUPBYSno;正确:SELECTSno,AVG(Grade)FROMSCGROUPBYSnoHAVINGAVG(Grade)=90;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院更新视图(续)更新视图(续)例将信息系学生视图IS_Student中学号200215122的学生姓名改为“刘辰”。UPDATEIS_StudentSETSname=刘辰WHERESno=200215122;转换后的语句:UPDATEStudentSETSname=刘辰WHERESno=200215122ANDSdept=IS;数据库技术与应用数据库技术与应用

73、北京邮电大学北京邮电大学计算机学院计算机学院更新视图(续)更新视图(续)例向信息系学生视图IS_S中插入一个新的学生记录:200215129,赵新,20岁INSERTINTOIS_StudentVALUES(95029,赵新,20);转换为对基本表的更新:INSERTINTOStudent(Sno,Sname,Sage,Sdept)VALUES(200215129,赵新,20,IS);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院更新视图(续)更新视图(续)例删除信息系学生视图IS_Student中学号为200215129的记录DELETEFROMIS_Stude

74、ntWHERESno=200215129;转换为对基本表的更新:DELETEFROMStudentWHERESno=200215129ANDSdept=IS;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院更新视图(续)更新视图(续)n更新视图的限制:一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新例:视图S_G为不可更新视图。UPDATES_GSETGavg=90WHERESno=200215121;这个对视图的更新无法转换成对基本表SC的更新数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院更新视图(

75、续)更新视图(续)更新视图(续)更新视图(续)n允许对行列子集视图进行更新n对其他类型视图的更新不同系统有不同限制数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院视图的作用视图的作用视图的作用视图的作用1.视图能够简化用户的操作2.视图使用户能以多种角度看待同一数据3.视图对重构数据库提供了一定程度的逻辑独立性4.视图能够对机密数据提供安全保护5.适当的利用视图可以更清晰的表达查询数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院5.5 5.5 嵌入式嵌入式SQLSQL5.5.1 5.5.1 嵌入式嵌入式SQLSQL的特点的特点1. 1.

76、嵌入式嵌入式SQLSQL应注意的问题应注意的问题1) SQL1) SQL和主语言的配合问题。和主语言的配合问题。2) 2) 合理选择主语言。合理选择主语言。2. SQL2. SQL嵌入主语言时必须解决的三个问题嵌入主语言时必须解决的三个问题(1) (1) 如何区别如何区别SQLSQL和主语言和主语言(2) (2) 使数据库的工作单元与程序工作单元之间能够通信使数据库的工作单元与程序工作单元之间能够通信1) 1) 主语言通过主变量向主语言通过主变量向SQLSQL语句提供参数。语句提供参数。 2) SQL 2) SQL语句的当前工作状态和运行环境数据要返馈给应用程序。语句的当前工作状态和运行环境数

77、据要返馈给应用程序。(3) (3) 使用游标解决使用游标解决SQLSQL一次一集合的操作与主语言一次一记录一次一集合的操作与主语言一次一记录操作的矛盾操作的矛盾数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院5.5.25.5.2不用游标的不用游标的SQLSQL语句语句1. 1. 几种不需要使用游标的几种不需要使用游标的SQLSQL语句语句(1) (1) 用于说明主变量的说明性语句用于说明主变量的说明性语句 SQLSQL的说明性语句主要有两条:的说明性语句主要有两条: EXEC SQL BEGIN DECLARE SECTION EXEC SQL BEGIN DECL

78、ARE SECTION; EXEC SQL END DECLARE SECTION EXEC SQL END DECLARE SECTION;(2) (2) 数据定义和数据控制语句数据定义和数据控制语句(3) (3) 查询结果为单记录的查询语句查询结果为单记录的查询语句(4) (4) 数据的插入语句和某些数据删除、修改语句数据的插入语句和某些数据删除、修改语句独立的数据删除和修改语句不需要使用游标;与查询语句配合,删除或修独立的数据删除和修改语句不需要使用游标;与查询语句配合,删除或修改查询到的当前记录的操作,与游标有关。改查询到的当前记录的操作,与游标有关。 数据库技术与应用数据库技术与应用

79、北京邮电大学北京邮电大学计算机学院计算机学院2.2.不用游标的查询语句不用游标的查询语句EXEC SQL SELECT ALL|DISTINCTEXEC SQL SELECT ALL|DISTINCT目标列表达式目标列表达式 ,nn INTO INTO主变量主变量 指示变量指示变量,nn FROM FROM表名或视图名表名或视图名 ,n n WHERE WHERE条件表达式条件表达式 ;1) 1) 在语句开始前要加在语句开始前要加EXEC SQLEXEC SQL前缀。前缀。2) 2) 该查询语句中又扩充了该查询语句中又扩充了INTOINTO子句。子句。3) 3) 在在WHEREWHERE子句的

80、条件表达式中可以使用主变量。子句的条件表达式中可以使用主变量。4) 4) 由于查询的结果集中只有一条记录,该语句中不必有排序和分组子由于查询的结果集中只有一条记录,该语句中不必有排序和分组子句。句。5) INTO5) INTO子句中的主变量后面跟有指示变量时:结果列值为子句中的主变量后面跟有指示变量时:结果列值为NULLNULL,指示,指示变量为负值,结果列不向该主变量赋值;传递正常,指示变量的值为变量为负值,结果列不向该主变量赋值;传递正常,指示变量的值为0 0;主变量宽度不够,则指示变量的值为数据截断前的宽度。;主变量宽度不够,则指示变量的值为数据截断前的宽度。数据库技术与应用数据库技术与

81、应用北京邮电大学北京邮电大学计算机学院计算机学院【例】查询学号为主变量【例】查询学号为主变量givesnogivesno、课号为主变量、课号为主变量givecnogivecno的值的值的学生选课记录。的学生选课记录。 EXEC SQL SELECT EXEC SQL SELECT 学号,课程号,成绩学号,课程号,成绩 INTO :Sno INTO :Sno,:Cno:Cno,:grade :gradeid:grade :gradeid FROM FROM 选课选课 WHERE WHERE 学号学号= :givesno AND = :givesno AND 课程号课程号= :givecno= :

82、givecno;3. 3. 不用游标的数据维护语句不用游标的数据维护语句(1) (1) 不用游标的数据删除语句不用游标的数据删除语句【例】删除学号由主变量【例】删除学号由主变量SnoSno决定的学生记录。决定的学生记录。 EXEC SQL DELETEEXEC SQL DELETE FROM FROM 学生学生 WHERE WHERE 学号学号= :Sno= :Sno;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院(2)(2)不用游标的数据修改语句不用游标的数据修改语句【例】将计算机系所有学生的年龄都加上主变量【例】将计算机系所有学生的年龄都加上主变量RaiseR

83、aise。 EXEC SQL UPDATE EXEC SQL UPDATE 学生学生 SET SET 年龄年龄= =年龄年龄+:Raise+:Raise WHERE WHERE 所在系所在系=计算机系计算机系;【例】将计算机系学生的年龄置空。【例】将计算机系学生的年龄置空。 Raiseid=-1Raiseid=-1 EXEC SQL UPDATE EXEC SQL UPDATE 学生学生 SET SET 年龄年龄= =年龄年龄+:Raise :Raiseid+:Raise :Raiseid;(3) (3) 不用游标的数据插入语句不用游标的数据插入语句【例】将学号为主变量【例】将学号为主变量Sn

84、oSno、课程号为、课程号为CnoCno的选课记录,插到库中。的选课记录,插到库中。 EXEC SQL INSERTEXEC SQL INSERT INTO INTO 选课选课 VALUES (:Sno VALUES (:Sno, :Cno) :Cno);数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院5.5.35.5.3使用游标的使用游标的SQLSQL(1) (1) 定义游标命令定义游标命令 EXEC SQL DECLAREEXEC SQL DECLARE游标名游标名CURSORCURSOR FOR FOR子查询子查询 FOR UPDATE OF FOR UPDA

85、TE OF字段名字段名1 1 ,nn;删除和修改数据的语句中,删除和修改数据的语句中,WHEREWHERE为:为: WHERE CURRENT OFWHERE CURRENT OF游标名游标名【例】定义按主变量【例】定义按主变量DEPTDEPT查询系里学生的游标。查询系里学生的游标。 EXEC SQL DECLARE SX CURSOR FOR EXEC SQL DECLARE SX CURSOR FOR SELECT * FROM SELECT * FROM 学生学生 WHERE WHERE 所在系所在系= :DEPT= :DEPT;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计

86、算机学院计算机学院(2) (2) 打开、推进和关闭游标命令打开、推进和关闭游标命令nEXEC SQL OPEN EXEC SQL OPEN 游标名;游标名;执行对应的查询语句,并将游标指向结果集的第一条记执行对应的查询语句,并将游标指向结果集的第一条记录前。打开的游标处于活动状态,可以被推进。录前。打开的游标处于活动状态,可以被推进。n【例】打开【例】打开SXSX游标。游标。 DEPT= DEPT= 计算机系计算机系 EXEC SQL OPEN SX EXEC SQL OPEN SX;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院nEXEC SQL FETCHEX

87、EC SQL FETCH游标名游标名INTOINTO主变量组;主变量组;将游标下移一行,读出当前的记录,将当前记录的各数将游标下移一行,读出当前的记录,将当前记录的各数据项值放到据项值放到INTOINTO后的主变量组中。后的主变量组中。n【例】将打开的指向系的游标向前推进。【例】将打开的指向系的游标向前推进。 EXEC SQL FETCH SX EXEC SQL FETCH SX INTO :Sno INTO :Sno,:Sname:Sname,:Sage:Sage,:Sdept:Sdept;nEXEC SQL CLOSE EXEC SQL CLOSE 游标名;游标名; 数据库技术与应用数据库

88、技术与应用北京邮电大学北京邮电大学计算机学院计算机学院5.6 5.6 数据控制机制和语句数据控制机制和语句5.6.1 5.6.1 数据控制机制数据控制机制1. 1. 授权定义授权定义 具具有有授授权权资资格格的的用用户户,如如DBADBA或或DBODBO,通通过过数数据据控控制制语语言言DCLDCL,将授权决定告知数据库管理系统将授权决定告知数据库管理系统。2. 2. 存权处理存权处理DBMSDBMS把授权的结果编译后存入数据字典中。把授权的结果编译后存入数据字典中。3. 3. 查权操作查权操作 当当提提出出操操作作请请求求时时,系系统统在在数数据据字字典典中中查查找找该该用用户户的的数数据据

89、操操作作权权限限,当当拥拥有有该该操操作作权权时时执执行行其其操操作作,否否则则系系统统将将拒拒绝绝其其操操作。作。数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院5.6.2 数据控制语句1. 1. 授权语句授权语句 GRANTGRANT系统特权组系统特权组ToTo用户组用户组| PUBLIC| PUBLIC WITH GRANT OPTION WITH GRANT OPTION;1) PUBLIC1) PUBLIC指数据库的所有用户。指数据库的所有用户。2) WITH GRANT OPTION:2) WITH GRANT OPTION:获得权限的用户可以把该权限再

90、授予别的获得权限的用户可以把该权限再授予别的用户。用户。 GRANT ALL PRIVILIGES|GRANT ALL PRIVILIGES|对象特权组对象特权组ONON对象名对象名 TO TO用户组用户组| PUBLIC| PUBLIC WITH GRANT OPTION WITH GRANT OPTION;1) ALL PRIVILIGES1) ALL PRIVILIGES指所有的对象特权。指所有的对象特权。2) 2) 对象名指操作的对象标识,如表名、视图名和过程名等。对象名指操作的对象标识,如表名、视图名和过程名等。数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机

91、学院【例】把修改学生学号和查询学生表的权力授予用户王平。【例】把修改学生学号和查询学生表的权力授予用户王平。 GRANT UPDATE(GRANT UPDATE(学号学号) ),SELECT ON SELECT ON 学生学生 TO TO 王平;王平;【例】把建立数据库和备份数据库的权力赋给用户王平。【例】把建立数据库和备份数据库的权力赋给用户王平。 GRANT CREATE DATABASEGRANT CREATE DATABASE, BACKUP DATABASE TO BACKUP DATABASE TO 王平;王平;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算

92、机学院2.2.收权语句收权语句REVOKEREVOKE语句的一般格式为:语句的一般格式为: REVOKE REVOKE权限组权限组|ALL PRIVILIGES ON|ALL PRIVILIGES ON对象名对象名 FROM FROM用户名组用户名组| PUBLIC| PUBLIC;其中:其中:ONON子句用于指定被收回特权的对象;子句用于指定被收回特权的对象;ALL PRIVILIGESALL PRIVILIGES指收回所有特权;指收回所有特权;PUBLICPUBLIC指所有用户指所有用户【例】将用户王平的可以在学生表中修改学生学号的权利收回。【例】将用户王平的可以在学生表中修改学生学号的权

93、利收回。 REVOKE UPDATE(REVOKE UPDATE(学号学号) ON ) ON 学生学生 FROM FROM 王平;王平;数据库技术与应用数据库技术与应用北京邮电大学北京邮电大学计算机学院计算机学院3.3.拒绝访问语句拒绝访问语句拒绝访问语句的一般格式为:拒绝访问语句的一般格式为: DENY ALL PRIVILIGES | DENY ALL PRIVILIGES | 权限组权限组 ON ON 对象名对象名 TO TO 用户组用户组 | PUBLIC | PUBLIC;其中:其中:ONON子句用于说明对象特权的对象名;对象名指的是表子句用于说明对象特权的对象名;对象名指的是表名、视图名、视图和表的字段名或者过程名。名、视图名、视图和表的字段名或者过程名。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号