《l语言说明教程PPT课件》由会员分享,可在线阅读,更多相关《l语言说明教程PPT课件(121页珍藏版)》请在金锄头文库上搜索。
1、第5章 关系数据库标准语言SQL数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院关系数据库标准语言SQL5.1SQL概述及特点概述及特点5.2数据定义语句数据定义语句 5.3数据查询语句数据查询语句5.4数据更新语句数据更新语句5.5嵌入式嵌入式SQL5.6数据控制机制和语句数据控制机制和语句数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院5.1 SQL5.1 SQL概述及特点概述及特点1. SQL的主要功能的主要功能(1) (1) 数据定据定义功能功能 定定义关系系数据据库的模式、外模式和的模式、外模式和内模式,以模式,以实现对基本基本表、表、视图以及索引文件
2、的定以及索引文件的定义、修改和、修改和删除等操作。除等操作。(2) (2) 数据操据操纵功能功能 包括包括数据据查询和和数据更新据更新两种数据操作据操作语句:句:数据据查询指指对数据据库中的中的数据据查询、统计、分、分组、排序操作;、排序操作;数据更新据更新指指数据的据的插入、入、删除、修改等除、修改等数据据维护操作。操作。(3) (3) 数据控制功能据控制功能 通通过对数据据库用用户的授的授权和收和收权命令命令来实现有有关数据的存据的存取控制,以保取控制,以保证数据据库的安全性。的安全性。数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院2. SQL的特点 (1) SQL(1)
3、 SQL具有自含式和嵌入式两种形式。具有自含式和嵌入式两种形式。(2) SQL(2) SQL具有语言简洁、易学易用的特点。具有语言简洁、易学易用的特点。(3) SQL(3) SQL支持三级模式结构。支持三级模式结构。 全体基本表构成了数据库的模式。全体基本表构成了数据库的模式。 视图和部分基本表构成了数据库的外模式。视图和部分基本表构成了数据库的外模式。 数据库的存储文件和它们的索引文件构成了关系数据库的数据库的存储文件和它们的索引文件构成了关系数据库的内模式。内模式。数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院nSQL功能极强,完成核心功能只用了9个动词。数据数据库技技术
4、与与应用用北京北京邮电大学大学计算机学院算机学院SQL视图视图2视图视图1基本表基本表2基本表基本表1基本表基本表3基本表基本表4存储文件存储文件2存储文件存储文件1外模式外模式模模式式内模式内模式SQL支持关系数据库三级模式结构数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院5.2 数据定义语句5.2.1 5.2.1 基本表的定义和维护基本表的定义和维护1. 1. 定义基本表定义基本表定义基本表语句的一般格式为:定义基本表语句的一般格式为: CREATE TABLE CREATE TABLE 库名库名 表名表名( ( 列名数据类型列名数据类型 列级完整性约束条件列级完整性约束
5、条件 , 列名数据类型列名数据类型 列级完整性约束条件列级完整性约束条件 ,nn ,表级完整性约束条件,表级完整性约束条件 ,n )n );数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院类型表示类型表示类型说明类型说明数值型数值型数据数据SMALLINT半字长二进制整数。半字长二进制整数。15bits数据数据INTEGER或或INT全字长(四字长)整数。全字长(四字长)整数。31bits数据数据DECIMAL(p,q)十进制数,共十进制数,共p位,其中小数点后位,其中小数点后q位。位。0qp,q=0时可省略不写时可省略不写FLOAT双字长浮点数双字长浮点数字符型字符型数据数据
6、CHARTER(n)或或CHAR(n)长度为长度为n的定长字符串的定长字符串VARCHAR(n)最大长度为最大长度为n的变长字符串的变长字符串特殊数据类型特殊数据类型GRAPHIC(n)长度为长度为n的定长图形字符串的定长图形字符串VARGRAPHIC(n)最大长度为最大长度为n的变长图形字符串的变长图形字符串日期时日期时间型间型DATE日期型,格式为日期型,格式为YYYY-MM-DDTIME时间型,格式为时间型,格式为HH.MM.SSTIMESTAMP日期加时间日期加时间(1) SQL(1) SQL支持的数据类型支持的数据类型数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院(
7、2)列级完整性的约束条件针对属性性值设置的限制置的限制条件。件。1) NOT NULL1) NOT NULL或或NULLNULL约束。约束。NOT NULLNOT NULL约束不允许字段值为空,而约束不允许字段值为空,而NULLNULL约束允许字段值为空。约束允许字段值为空。2) UNIQUE2) UNIQUE约束。惟一性约束,即不允许列中出现重复的属性值。约束。惟一性约束,即不允许列中出现重复的属性值。3) DEFAULT3) DEFAULT约束。默束。默认值约束。束。 DEFAULT约束名束名默默认值FOR列名列名4) CHECK4) CHECK约束。束。检查约束。束。CONSTRAINT
8、约束名束名CHECK (约束束条件表件表达式式)数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院(3) (3) 表级完整性约束条件表级完整性约束条件表级完整性约束条件表级完整性约束条件 涉及到关系中多个列的限制条件。涉及到关系中多个列的限制条件。1) UNIQUE1) UNIQUE约束。惟一性约束。约束。惟一性约束。2) PRIMARY KEY2) PRIMARY KEY约束。定义主码,保证惟一性和非空性。约束。定义主码,保证惟一性和非空性。 CONTRAINT CONTRAINT约束名约束名PRIMARY KEY CLUSTERED (PRIMARY KEY CLUSTERE
9、D (列组列组) )3) FOREIGN KEY3) FOREIGN KEY约束。用于定义参照完整性。约束。用于定义参照完整性。 CONTRAINT CONTRAINT约束名约束名FOREIGN KEY(FOREIGN KEY(外码外码) ) REFERENCES REFERENCES被参照表名被参照表名( (与外码对应的主码名与外码对应的主码名) )数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院 CREATE TABLE CREATE TABLE 学生学生( (学号学号 CHAR(5) NOT NULL UNIQUE CHAR(5) NOT NULL UNIQUE, 姓名姓
10、名 CHAR(8) NOT NULL CHAR(8) NOT NULL,年龄年龄 SMALLINT SMALLINT, 性别性别 CHAR(2) CHAR(2),所在系所在系 CHAR(20) CHAR(20), DEFAULT C1 20 FOR DEFAULT C1 20 FOR 年龄,年龄, CONSTRAINT C2 CHECK( CONSTRAINT C2 CHECK(性别性别 IN ( IN (男男,女女); 建立基本表:建立基本表:建立基本表:建立基本表: 学生学生学生学生( (学号,姓名,年龄,性别,所在系学号,姓名,年龄,性别,所在系学号,姓名,年龄,性别,所在系学号,姓名,
11、年龄,性别,所在系) ); 课程课程课程课程( (课程号,课程名,先行课课程号,课程名,先行课课程号,课程名,先行课课程号,课程名,先行课) ); 选课选课选课选课( (学号,课程号,成绩学号,课程号,成绩学号,课程号,成绩学号,课程号,成绩). ).数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院CREATETABLE课程课程(课程号课程号CHAR(5)PRIMARYKEY,课程名课程名CHAR(20),先行课先行课CHAR(5);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院CREATETABLE选课选课(学号学号CHAR(5),课程号课程号CHAR(5)
12、,成绩成绩SMALLINT,CONSTRAINTC3CHECK(成绩成绩BETWEEN0AND100),CONSTRAINTC4PRIMARYKEY(学号,课程号学号,课程号),CONSTRAINTC5FOREIGNKEY(学号学号)REFERENCES学生学生(学号学号),CONSTRAINTC6FOREIGNKEY(课程号课程号)REFERENCES课程课程(课程号课程号);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院实体完整性定义实体完整性定义n关系模型的实体完整性CREATETABLE中用PRIMARYKEY定义n单属性构成的码有两种说明方法定义为列级约束条件定义为
13、表级约束条件n对多个属性构成的码只有一种说明方法定义为表级约束条件数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院实体完整性定义实体完整性定义(续续)例将Student表中的Sno属性定义为码(1)在列级定义主码在列级定义主码CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,SnameCHAR(20)NOTNULL,SsexCHAR(2),SageSMALLINT,SdeptCHAR(20);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院实体完整性定义实体完整性定义(续续)(2)在表级定义主码在表级定义主码CREATETABLES
14、tudent(SnoCHAR(9),SnameCHAR(20)NOTNULL,SsexCHAR(2),SageSMALLINT,SdeptCHAR(20),PRIMARYKEY(Sno);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院实体完整性定义实体完整性定义(续续)例将SC表中的Sno,Cno属性组定义为码CREATETABLESC(SnoCHAR(9)NOTNULL,CnoCHAR(4)NOTNULL,GradeSMALLINT,PRIMARYKEY(Sno,Cno)/*只能在表级定义主码*/);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院实体完整性
15、检查和违约处理实体完整性检查和违约处理n插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:1.检查主码值是否唯一,如果不唯一则拒绝插入或修改2.检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院实体完整性检查和违约处理实体完整性检查和违约处理(续续)n检查记录中主码值是否唯一的一种方法是进行全表扫描数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院实体完整性检查和违约处理实体完整性检查和违约处理(续续)n索引数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院参照完整性
16、定义参照完整性定义n关系模型的参照完整性定义在CREATETABLE中用FOREIGNKEY短语定义哪些列为外码用REFERENCES短语指明这些外码参照哪些表的主码数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院参照完整性定义参照完整性定义(续续)例如,关系SC中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码和Course表的主码例定义SC中的参照完整性CREATETABLESC(SnoCHAR(9)NOTNULL,CnoCHAR(4)NOTNULL,GradeSMALLINT,PRIMARYKEY(Sno
17、,Cno),/*在表级定义实体完整性*/FOREIGNKEY(Sno)REFERENCESStudent(Sno),/*在表级定义参照完整性*/FOREIGNKEY(Cno)REFERENCESCourse(Cno)/*在表级定义参照完整性*/);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院参照完整性检查和违约处理参照完整性检查和违约处理可能破坏参照完整性的情况及违约处理被参照表(例如Student)参照表(例如SC)违约处理可能破坏参照完整性 插入元组拒绝可能破坏参照完整性 修改外码值拒绝删除元组 可能破坏参照完整性拒绝/级连删除/设置为空值修改主码值 可能破坏参照完整性
18、拒绝/级连修改/设置为空值数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院违约处理违约处理n参照完整性违约处理1.拒绝(NOACTION)执行默认策略2.级联(CASCADE)操作3.设置为空值(SET-NULL)对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院违约处理违约处理(续续)例显式说明参照完整性的违约处理示例CREATETABLESC(SnoCHAR(9)NOTNULL,CnoCHAR(4)NOTNULL,GradeSMALLINT,PRIMARYKEY(Sno,Cno),FOREIGNKEY
19、(Sno)REFERENCESStudent(Sno)ONDELETECASCADE/*级联删除SC表中相应的元组*/ONUPDATECASCADE,/*级联更新SC表中相应的元组*/FOREIGNKEY(Cno)REFERENCESCourse(Cno)ONDELETENOACTION/*当删除course表中的元组造成了与SC表不一致时拒绝删除*/ONUPDATECASCADE/*当更新course表中的cno时,级联更新SC表中相应的元组*/);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院用户定义的完整性用户定义的完整性n用户定义的完整性就是针对某一具体应用的数据必须
20、满足的语义要求nRDBMS提供,而不必由应用程序承担数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院属性上的约束条件的定义属性上的约束条件的定义nCREATETABLE时定义列值非空(NOTNULL)列值唯一(UNIQUE)检查列值是否满足一个布尔表达式(CHECK)数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院属性上的约束条件的定义属性上的约束条件的定义(续续)n1.不允许取空值例在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。CREATETABLESC(SnoCHAR(9)NOTNULL,CnoCHAR(4)NOTNULL,GradeSMA
21、LLINTNOTNULL,PRIMARYKEY(Sno,Cno),/*如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值,则在列级不允许取空值的定义就不必写了*/);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院属性上的约束条件的定义属性上的约束条件的定义(续续)n2.列值唯一例建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码CREATETABLEDEPT(DeptnoNUMERIC(2),DnameCHAR(9)UNIQUE,/*要求Dname列值唯一*/LocationCHAR(10),PRIMARYKEY(Deptno);数据数
22、据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院属性上的约束条件的定义属性上的约束条件的定义(续续)n3.用CHECK短语指定列值应该满足的条件例7Student表的Ssex只允许取“男”或“女”。CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,SnameCHAR(8)NOTNULL,SsexCHAR(2)CHECK(SsexIN(男,女),/*性别属性Ssex只允许取男或女*/SageSMALLINT,SdeptCHAR(20);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院属性上的约束条件检查和违约处理属性上的约束条件检查和违约处
23、理属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理n插入元组或修改属性的值时,RDBMS检查属性上的约束条件是否被满足n如果不满足则操作被拒绝执行数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院元组上的约束条件的定义元组上的约束条件的定义n在CREATETABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制n同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院元组上的约束条件的定义元组上的约束条件的定义(续续)例9当学生的性别是男时,其名字不能以Ms.打头。CREATET
24、ABLEStudent(SnoCHAR(9),SnameCHAR(8)NOTNULL,SsexCHAR(2),SageSMALLINT,SdeptCHAR(20),PRIMARYKEY(Sno),CHECK (Ssex=女女 OR Sname NOT LIKE Ms.%)/*定义了元组中Sname和Ssex两个属性值之间的约束条件*/);性别是女性的元组都能通过该项检查,因为Ssex=女成立;当性别是男性时,要通过检查则名字一定不能以Ms.打头数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理元组上的约束条件检查和违约处
25、理元组上的约束条件检查和违约处理n插入元组或修改属性的值时,RDBMS检查元组上的约束条件是否被满足n如果不满足则操作被拒绝执行数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院完整性约束命名子句完整性约束命名子句nCONSTRAINT约束CONSTRAINTPRIMARYKEY短语|FOREIGNKEY短语|CHECK短语数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院完整性约束命名子句完整性约束命名子句(续续)例建立学生登记表Student,要求学号在9000099999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。CREATETABLEStu
26、dent(SnoNUMERIC(6)CONSTRAINTC1CHECK(SnoBETWEEN90000AND99999),SnameCHAR(20)CONSTRAINTC2NOTNULL,SageNUMERIC(3)CONSTRAINTC3CHECK(Sage30),SsexCHAR(2)CONSTRAINTC4CHECK(SsexIN(男,女),CONSTRAINTStudentKeyPRIMARYKEY(Sno);在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1、C2、C3、C4四个列级约束。数据数据库技技术与与应用用北京北京邮电大学大学计算机学院
27、算机学院2.2.修改基本表和删除基本表修改基本表和删除基本表 ALTER TABLE表名表名 ADD(新列名新列名数据据类型型完整性完整性约束束 ,n) DROP完整性完整性约束名束名 MODIFY(列名列名数据据类型型,n);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院n向Student表增加“入学时间”列,其数据类型为日期型。ALTERTABLEStudentADDS_entranceDATE;不论基本表中原来是否已有数据,新增加的列一律为空值。n增加课程名称必须取唯一值的约束条件。ALTERTABLECourseADDUNIQUE(Cname);数据数据库技技术与与应
28、用用北京北京邮电大学大学计算机学院算机学院例修改表Student中的约束条件,要求学号改为在900000999999之间,年龄由小于30改为小于40可以先删除原来的约束条件,再增加新的约束条件ALTERTABLEStudentDROPCONSTRAINTC1;ALTERTABLEStudentADDCONSTRAINTC1CHECK(SnoBETWEEN900000AND999999),ALTERTABLEStudentDROPCONSTRAINTC3;ALTERTABLEStudentADDCONSTRAINTC3CHECK(Sage (大于)、(大于)、 (小于)、(小于)、=(大于等于)
29、、(大于等于)、!=!=(不等于)、(不等于)、(小于大于)、(小于大于)、!(不(不大于)和大于)和 ! !、=、9090;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院(2) 自身自身连接接例如,例如,课程表中的先行程表中的先行课是在上是在上学期期应开设的,先行的,先行课的的先行先行课,即,即间接先行接先行课应提前一提前一学年年开设。如果求。如果求查询某某门课的的间接先行接先行课或全部或全部课程的程的间接先行接先行课,就需要,就需要对课程表程表进行自身行自身连接。接。 课程号课程号课程名课程名先行课先行课C1计算机引论计算机引论C2PASCAL语言语言C1C3数据结构数据
30、结构C2C4数据库数据库C3C5软件工程软件工程C4课程的先行关系链为:课程的先行关系链为:C5C4C3C2C1,课程的间接关系链为:课程的间接关系链为:C5C3C1。 数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院课程号课程号课程名课程名先行课先行课课程号课程号课程名课程名先行课先行课C1计算机引论计算机引论C1计计 算算 机机 引引论论C2Pascal语言语言C1C2Pascal语言语言C1C3数据结构数据结构C2C3数据结构数据结构C2C4数据库数据库C3C4数据库数据库C3C5软件工程软件工程C4C5软件工程软件工程C4A.课程号课程号A.课程名课程名B.先行课先行课
31、C2Pascal语言语言C3数据结构数据结构C1C4数据库数据库C2C5软件工程软件工程C3AB结果【例】【例】查询每一门课的间接先行课。查询每一门课的间接先行课。SELECTA.SELECTA.课程号,课程号,A.A.课程名,课程名,B.B.先行课先行课FROMFROM课程课程AA,课程,课程BBWHEREA.WHEREA.先行课先行课=B.=B.课程号课程号 数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院关系代数:n外连接如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫做外连接(OUTERJOIN)。n左外连接如果只把左边关系R中要舍弃的
32、元组保留就叫做左外连接(LEFTOUTERJOIN或LEFTJOIN)n右外连接如果只把右边关系S中要舍弃的元组保留就叫做右外连接(RIGHTOUTERJOIN或RIGHTJOIN)。数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院loan-numberamountL-170L-230L-260300040001700customer-nameloan-numberJonesSmithHayesL-170L-230L-155branch-nameDowntownRedwoodPerryridge关系loan关系borrower例:数据数据库技技术与与应用用北京北京邮电大学大学计
33、算机学院算机学院内连接内连接loan Borrowerloan borrower 左外连接左外连接loan-numberamountL-170L-23030004000customer-nameJonesSmithbranch-nameDowntownRedwoodloan-numberamountL-170L-230L-260300040001700customer-nameJonesSmithnullbranch-nameDowntownRedwoodPerryridge数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院右外连接右外连接 loanborrowerloan-nu
34、mberamountL-170L-230L-15530004000nullcustomer-nameJonesSmithHayesloan-numberamountL-170L-230L-260L-155300040001700nullcustomer-nameJonesSmithnullHayesloan borrower 全外连接全外连接branch-nameDowntownRedwoodnullbranch-nameDowntownRedwoodPerryridgenull数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院(3) 外部连接外部连接左外部连接操作是在结果集中保
35、留连接表达式左表中的非匹配记录;左外部连接操作是在结果集中保留连接表达式左表中的非匹配记录;右外部连接操作是在结果集中保留连接表达式右表中的非匹配记录。右外部连接操作是在结果集中保留连接表达式右表中的非匹配记录。外部连接符号为外部连接符号为“*=”,右外部连接符号为,右外部连接符号为“=*”。外部连接中不匹。外部连接中不匹配的分量用配的分量用NULL表示。表示。职工职工号号姓名姓名性别性别年龄年龄所在部所在部门门部门部门号号部门名部门名称称电话电话1010李勇李勇男男201111生产科生产科5661011刘晨刘晨女女1912计划科计划科5781012王敏王敏女女221213一车间一车间4671
36、014张立张立男男211314科研所科研所职工表职工表 部门表部门表 数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院连连接的接的结结果集果集 职工号职工号姓名姓名性别性别年龄年龄所在部门所在部门部门名称部门名称电话电话1010李勇李勇男男2011生产科生产科5661012王敏王敏女女2212计划科计划科5781014张立张立男男2113一车间一车间467职工号职工号姓名姓名性别性别年龄年龄所在部门所在部门部门名称部门名称电话电话1010李勇李勇男男2011生产科生产科5661011刘晨刘晨女女191012王敏王敏女女2212计划科计划科5781014张立张立男男2113一车间
37、一车间467内连接的结果集内连接的结果集 左外部连接的结果集左外部连接的结果集数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院内连接:内连接: SELECT SELECT 职工职工.*.*,部门名称,电话,部门名称,电话 FROM FROM 职工,部门职工,部门 WHERE WHERE 职工职工. .所在部门所在部门= = 部门部门. .部门号;部门号;左外部连接:左外部连接: SELECT SELECT 职工职工.*.*,部门名称,电话,部门名称,电话 FROM FROM 职工,部门职工,部门 WHERE WHERE 职工职工. .所在部门所在部门*= *= 部门部门. .部
38、门号;部门号;右外部连接:右外部连接: SELECT SELECT 职工职工.*.*,部门名称,电话,部门名称,电话 FROM FROM 职工,部门职工,部门 WHERE WHERE 职工职工. .所在部门所在部门 =* =*部门部门. .部门号;部门号; 用用SQLSQL表达职工和部门之间的内连接、左外部连接和右外表达职工和部门之间的内连接、左外部连接和右外部连接的语句部连接的语句数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院3. 3. 嵌套查询嵌套查询嵌套查询嵌套查询(1)使用使用IN操作符的嵌套操作符的嵌套查询【例例5-20】求求选修了高等修了高等数学的的学生生学号和姓
39、名。和姓名。 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
40、HERE WHERE 学生学生. .学号学号= =课程课程. .学号学号 AND AND 课程课程. .课程号课程号= =选课选课. .课程号课程号 AND AND 课程课程. .课程名课程名=高等数学高等数学 ;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院(2) (2) 使用比较符的嵌套查询使用比较符的嵌套查询使用比较符的嵌套查询使用比较符的嵌套查询【例例】求求C1课程的成程的成绩高于高于张三的三的学生生学号和成和成绩。 SELECT SELECT 学号,成绩学号,成绩 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C1 AND =C1 AND 成绩
41、成绩 ( ( SELEC SELEC 成绩成绩 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C1AND =C1AND 学号学号= = (SELECT (SELECT 学号学号 FROM FROM 学生学生 WHERE WHERE 姓名姓名=张三张三);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院(3) (3) (3) (3) 使用使用使用使用ANYANYANYANY或或或或ALLALLALLALL操作符的嵌套查询操作符的嵌套查询操作符的嵌套查询操作符的嵌套查询格式为:字段比较符格式为:字段比较符ANY|ALLANY|ALL子查询子查询操作符操作符语意
42、语意ANY大于子查询结果中的某个值,即表示大于查询结果中最小值大于子查询结果中的某个值,即表示大于查询结果中最小值ALL大于子查询结果中的所有值,即表示大于查询结果中最大值大于子查询结果中的所有值,即表示大于查询结果中最大值ANY小于子查询结果中的某个值,即表示小于查询结果中最大值小于子查询结果中的某个值,即表示小于查询结果中最大值=ANY大于等于子查询结果中的某个值,即表示大于等于结果集中最小值大于等于子查询结果中的某个值,即表示大于等于结果集中最小值=ALL大于等于子查询结果中的所有值,即表示大于等于结果集中最大值大于等于子查询结果中的所有值,即表示大于等于结果集中最大值=ANY小于等于子
43、查询结果中的某个值,即表示小于等于结果集中最大值小于等于子查询结果中的某个值,即表示小于等于结果集中最大值=ALL小于等于子查询结果中的所有值,即表示小于等于结果集中最小值小于等于子查询结果中的所有值,即表示小于等于结果集中最小值=ANY等于子查询结果中的某个值,即相当于等于子查询结果中的某个值,即相当于IN=ALL等于子查询结果中的所有值等于子查询结果中的所有值(通常没有实际意义通常没有实际意义)!=(或或)ANY不等于子查询结果中的某个值,不等于子查询结果中的某个值,!=(或或)ALL不等于子查询结果中的任何一个值,即相当于不等于子查询结果中的任何一个值,即相当于NOT IN数据数据库技技
44、术与与应用用北京北京邮电大学大学计算机学院算机学院【例】【例】求其他系中比求其他系中比计算机系某一算机系某一学生年生年龄小的小的学生。生。SELECT *SELECT * FROM FROM 学生学生 WHERE WHERE 年龄年龄 ANY (SELECT ANY (SELECT 年龄年龄 FROM FROM 学生学生 WHERE WHERE 所在系所在系=计算机系计算机系) AND ) AND 所在系所在系计算机系计算机系;【例】【例】求其他系中比求其他系中比计算机系算机系学生年生年龄都小的都小的学生。生。SELECT *SELECT * FROM FROM 学生学生 WHERE WHER
45、E 年龄年龄 ALL (SELECT ALL (SELECT 年龄年龄 FROM FROM 学生学生 WHERE WHERE 所在系所在系=计算机系计算机系) AND ) AND 所在系所在系 计算机系计算机系 ;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院(4) (4) (4) (4) 使用使用使用使用EXISTSEXISTSEXISTSEXISTS操作符的嵌套查询操作符的嵌套查询操作符的嵌套查询操作符的嵌套查询【例】求选修了【例】求选修了C2C2课程的程的学生姓名。生姓名。SELECT SELECT 姓名姓名 FROM FROM 学生学生 WHERE EXISTS (S
46、ELECT * FROM WHERE EXISTS (SELECT * FROM 选课选课 WHERE WHERE 学生学生. .学号学号= =学号学号 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);数据数据库技技术与
47、与应用用北京北京邮电大学大学计算机学院算机学院【例】【例】查询选修了全部修了全部课程的程的学生的姓名。生的姓名。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 课程课程. .课程号课程号= =课程号课程号);数据数据库技技术与与
48、应用用北京北京邮电大学大学计算机学院算机学院【例例】求求至至少少选选修修了了学学号号为为“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 * FRO
49、M 选课选课 选课选课2 2 WHERE WHERE 学生学生. .学号学号= =选课选课2.2.学号学号 AND AND 选课选课2 .2 .课程号课程号= =选课选课1.1.课程号课程号) );数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院n不同形式的查询间的替换一些带EXISTS或NOTEXISTS谓词的子查询不能被其他形式的子查询等价替换所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换n用EXISTS/NOTEXISTS实现全称量词(难点)SQL语言中没有全称量词(Forall)可以把带有全称量词的谓词转换为等价的带有存在
50、量词的谓词:(x)P(x(P)数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院4.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 学号学号 F
51、ROM FROM 选课选课 WHERE WHERE 课程号课程号=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 FRO
52、M 选课选课 WHERE WHERE 课程号课程号=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);数据数据库技技术与与应用用北京北京邮电大
53、学大学计算机学院算机学院nGROUPBY子句分组:n细化聚集函数的作用对象未对查询结果分组,聚集函数将作用于整个查询结果对查询结果分组后,聚集函数将分别作用于每个组作用对象是查询的中间结果表按指定的一列或多列值分组,值相等的为一组5.使用分组和SQL函数查询数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院函数函数功能功能AVG(数值表达式数值表达式)求与字段相关的数值表达式的平均值求与字段相关的数值表达式的平均值SUM(数值表达式数值表达式)求与字段相关的数值表达式的和值求与字段相关的数值表达式的和值MIN(字段表达式字段表达式)求字段表达式的最小值求字段表达式的最小值MAX(
54、字段表达式字段表达式)求字段表达式的最大值求字段表达式的最大值COUNT(*|字段字段)求记录行数求记录行数(*),或求不是,或求不是NULL的字段的行数的字段的行数【例】求学生的总人数。【例】求学生的总人数。 SELECT COUNT (*)SELECT COUNT (*) FROM FROM 学生;学生;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院【例】求选修了课程的学生人数。【例】求选修了课程的学生人数。 SELECT COUNT(DISTINCT SELECT COUNT(DISTINCT 学号学号) ) FROM FROM 选课;选课;【例】求课程和选修该课程的人
55、数。【例】求课程和选修该课程的人数。 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子句作用
56、于基表或视图,从中选择满足条件的元组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);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院【例】将一个新学生记录【例】将一个新学生记录( (学号:学号:9801098
57、010,姓名:,姓名:张三张三,年龄:年龄:2020,所在系:,所在系:计算机系计算机系 ) )插入到学生表中。插入到学生表中。INSERTINSERTINTO INTO 学生学生VALUES (98010VALUES (98010,张三张三,2020,计算机系计算机系);【例】插入一条选课记录【例】插入一条选课记录( (学号:学号:9801198011,课程号:,课程号:C10C10,成绩,成绩不详不详) )。 INSERTINSERT INTO INTO 选课选课 ( (学号,课程号学号,课程号) ) VALUES (98011 VALUES (98011,C10)C10);数据数据库技技
58、术与与应用用北京北京邮电大学大学计算机学院算机学院2. 2. 在表中插入子查询的结果集在表中插入子查询的结果集INSERTINSERT INTO INTO表名表名(属性列属性列1 1 ,属性列,属性列2 2) 子查询;子查询;【例】【例】求每求每个系系学生的平均年生的平均年龄,把,把结果存入果存入数据据库中。中。CREATE TABLE CREATE TABLE 系平均年龄系平均年龄 ( (系名称系名称CHAR(20)CHAR(20), 平均年龄平均年龄SMALLINT)SMALLINT); INSERT INSERT INTO INTO 系平均年龄系平均年龄 SELECT SELECT 所在
59、系,所在系,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;【例】将选课表中的数据库课程的成绩乘以【例】将
60、选课表中的数据库课程的成绩乘以。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条件条件 ;【例】删除艺术系的学生记录及选课记录。【例】删除艺术系的学生记录及选课记录。 DELET
61、EDELETE FROM FROM 选课选课 WHERE WHERE 学号学号 IN (SELECT IN (SELECT 学号学号 FROM FROM 学生学生 WHERE WHERE 所在系所在系=艺术系艺术系); DELETE DELETE FROM FROM 学生学生 WHERE WHERE 所在系所在系=艺术系艺术系 ;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院5.5 5.5 视视视视 图图图图视图的特点n虚表,是从一个或几个基本表(或视图)导出的表n只存放视图的定义,不存放视图对应的数据n基表中的数据发生变化,从视图中查询出的数据也随之改变数据数据库技技术与与
62、应用用北京北京邮电大学大学计算机学院算机学院视视视视 图图图图基于视图的操作n查询n删除n受限更新n定义基于该视图的新视图数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院一、建立视图一、建立视图一、建立视图一、建立视图n语句格式CREATEVIEW(,)ASWITHCHECKOPTION;n组成视图的属性列名:全部省略或全部指定n子查询不允许含有ORDERBY子句和DISTINCT短语数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院 建立视图(续)建立视图(续)建立视图(续)建立视图(续)nRDBMS执行CREATEVIEW语句时只是把视图定义存入数据字典,并不
63、执行其中的SELECT语句。n在对视图查询时,按视图的定义从基本表中将数据查出。数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院建立视图(续)建立视图(续)例建立信息系学生的视图。CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept=IS;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院建立视图(续)建立视图(续)建立视图(续)建立视图(续)例建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生。CREATEVIEWIS_StudentASSELECTSno,Sn
64、ame,SageFROMStudentWHERESdept=ISWITHCHECKOPTION;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院建立视图(续)建立视图(续)建立视图(续)建立视图(续)对IS_Student视图的更新操作:n修改操作:自动加上Sdept=IS的条件n删除操作:自动加上Sdept=IS的条件n插入操作:自动检查Sdept属性值是否为IS如果不是,则拒绝该插入操作如果没有提供Sdept属性值,则自动定义Sdept为IS数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院建立视图(续)建立视图(续)建立视图(续)建立视图(续)n基于多个基表
65、的视图例建立信息系选修了1号课程的学生视图。CREATEVIEWIS_S1(Sno,Sname,Grade)ASSELECT,Sname,GradeFROMStudent,SCWHERESdept=ISAND=AND=1;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院建立视图(续)建立视图(续)建立视图(续)建立视图(续)n基于视图的视图n例建立信息系选修了1号课程且成绩在90分以上的学生的视图。CREATEVIEWIS_S2ASSELECTSno,Sname,GradeFROMIS_S1WHEREGrade=90;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机
66、学院建立视图(续)建立视图(续)n带表达式的视图例定义一个反映学生出生年份的视图。CREATEVIEWBT_S(Sno,Sname,Sbirth)ASSELECTSno,Sname,2000-SageFROMStudent;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院建立视图(续)建立视图(续)建立视图(续)建立视图(续)n分组视图例将学生的学号及他的平均成绩定义为一个视图假设SC表中“成绩”列Grade为数字型CREATVIEWS_G(Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSno;数据数据库技技术与与应用用北京北京邮电大学
67、大学计算机学院算机学院 建立视图(续)建立视图(续)建立视图(续)建立视图(续)n不指定属性列例将Student表中所有女生记录定义为一个视图CREATEVIEWF_Student(F_Sno,name,sex,age,dept)ASSELECT*FROMStudentWHERESsex=女;缺 点 : 修 改 基 表 Student的 结 构 后 , Student表 与F_Student视图的映象关系被破坏,导致该视图不能正确工作。数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院二、删除视图二、删除视图n语句的格式:DROPVIEW;该语句从数据字典中删除指定的视图定义如果
68、该视图上还导出了其他视图,使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除删除基表时,由该基表导出的所有视图定义都必须显式地使用DROPVIEW语句删除数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院删除视图删除视图(续)续)例删除视图BT_S:DROPVIEWBT_S;删除视图IS_S1:DROPVIEWIS_S1;拒绝执行级联删除:DROPVIEWIS_S1CASCADE;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院查询视图查询视图n用户角度:查询视图与查询基本表相同nRDBMS实现视图查询的方法视图消解法(ViewResolutio
69、n)进行有效性检查转换成等价的对基本表的查询执行修正后的查询数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院查询视图(续)查询视图(续)例在信息系学生的视图中找出年龄小于20岁的学生。SELECTSno,SageFROMIS_StudentWHERESage20;IS_Student视图的定义(参见视图定义例1)数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院查询视图(续)查询视图(续)视图消解转换后的查询语句为:SELECTSno,SageFROMStudentWHERESdept=ISANDSage=90;S_G视图的子查询定义:CREATEVIEWS_G(
70、Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSno;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院查询转换查询转换错误:SELECTSno,AVG(Grade)FROMSCWHEREAVG(Grade)=90GROUPBYSno;正确:SELECTSno,AVG(Grade)FROMSCGROUPBYSnoHAVINGAVG(Grade)=90;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院更新视图(续)更新视图(续)例将信息系学生视图IS_Student中学号200215122的学生姓名改为“刘辰”。UPDATE
71、IS_StudentSETSname=刘辰WHERESno=200215122;转换后的语句:UPDATEStudentSETSname=刘辰WHERESno=200215122ANDSdept=IS;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院更新视图(续)更新视图(续)例向信息系学生视图IS_S中插入一个新的学生记录:200215129,赵新,20岁INSERTINTOIS_StudentVALUES(95029,赵新,20);转换为对基本表的更新:INSERTINTOStudent(Sno,Sname,Sage,Sdept)VALUES(200215129,赵新,20
72、,IS);数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院更新视图(续)更新视图(续)例删除信息系学生视图IS_Student中学号为200215129的记录DELETEFROMIS_StudentWHERESno=200215129;转换为对基本表的更新:DELETEFROMStudentWHERESno=200215129ANDSdept=IS;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院更新视图(续)更新视图(续)n更新视图的限制:一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新例:视图S_G为不可更新视图。UPDA
73、TES_GSETGavg=90WHERESno=200215121;这个对视图的更新无法转换成对基本表SC的更新数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院更新视图(续)更新视图(续)更新视图(续)更新视图(续)n允许对行列子集视图进行更新n对其他类型视图的更新不同系统有不同限制数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院视图的作用视图的作用视图的作用视图的作用1.视图能够简化用户的操作2.视图使用户能以多种角度看待同一数据3.视图对重构数据库提供了一定程度的逻辑独立性4.视图能够对机密数据提供安全保护5.适当的利用视图可以更清晰的表达查询数据数据库技技
74、术与与应用用北京北京邮电大学大学计算机学院算机学院5.5 5.5 嵌入式嵌入式SQLSQL5.5.1 5.5.1 嵌入式嵌入式SQLSQL的特点的特点1. 1. 嵌入式嵌入式SQLSQL应注意的问题应注意的问题1) SQL1) SQL和主语言的配合问题。和主语言的配合问题。2) 2) 合理选择主语言。合理选择主语言。2. SQL2. SQL嵌入主语言时必须解决的三个问题嵌入主语言时必须解决的三个问题(1) (1) 如何区别如何区别SQLSQL和主语言和主语言(2) (2) 使数据库的工作单元与程序工作单元之间能够通信使数据库的工作单元与程序工作单元之间能够通信1) 1) 主语言通过主变量向主语
75、言通过主变量向SQLSQL语句提供参数。语句提供参数。 2) SQL 2) SQL语句的当前工作状态和运行环境数据要返馈给应用程序。语句的当前工作状态和运行环境数据要返馈给应用程序。(3) (3) 使用游标解决使用游标解决SQLSQL一次一集合的操作与主语言一次一记录一次一集合的操作与主语言一次一记录操作的矛盾操作的矛盾数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院5.5.25.5.2不用游标的不用游标的SQLSQL语语句句1. 1. 几种不需要使用游标的几种不需要使用游标的SQLSQL语句语句(1) (1) 用于说明主变量的说明性语句用于说明主变量的说明性语句 SQLSQL
76、的说明性语句主要有两条:的说明性语句主要有两条: EXEC SQL BEGIN DECLARE SECTION EXEC SQL BEGIN DECLARE SECTION; EXEC SQL END DECLARE SECTION EXEC SQL END DECLARE SECTION;(2) (2) 数据定义和数据控制语句数据定义和数据控制语句(3) (3) 查询结果为单记录的查询语句查询结果为单记录的查询语句(4) (4) 数据的插入语句和某些数据删除、修改语句数据的插入语句和某些数据删除、修改语句独立的数据删除和修改语句不需要使用游标;与查询语句配合,删除或修独立的数据删除和修改语句
77、不需要使用游标;与查询语句配合,删除或修改查询到的当前记录的操作,与游标有关。改查询到的当前记录的操作,与游标有关。 数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院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 S
78、QL前缀。前缀。2) 2) 该查询语句中又扩充了该查询语句中又扩充了INTOINTO子句。子句。3) 3) 在在WHEREWHERE子句的条件表达式中可以使用主变量。子句的条件表达式中可以使用主变量。4) 4) 由于查询的结果集中只有一条记录,该语句中不必有排序和分组子由于查询的结果集中只有一条记录,该语句中不必有排序和分组子句。句。5) INTO5) INTO子句中的主变量后面跟有指示变量时:结果列值为子句中的主变量后面跟有指示变量时:结果列值为NULLNULL,指示,指示变量为负值,结果列不向该主变量赋值;传递正常,指示变量的值为变量为负值,结果列不向该主变量赋值;传递正常,指示变量的值为
79、0 0;主变量宽度不够,则指示变量的值为数据截断前的宽度。;主变量宽度不够,则指示变量的值为数据截断前的宽度。数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院【例】查询学号为主变量【例】查询学号为主变量givesnogivesno、课号为主变量、课号为主变量givecnogivecno的值的值的学生选课记录。的学生选课记录。 EXEC SQL SELECT EXEC SQL SELECT 学号,课程号,成绩学号,课程号,成绩 INTO :Sno INTO :Sno,:Cno:Cno,:grade :gradeid:grade :gradeid FROM FROM 选课选课 WH
80、ERE WHERE 学号学号= :givesno AND = :givesno AND 课程号课程号= :givecno= :givecno;3. 3. 不用游标的数据维护语句不用游标的数据维护语句(1) (1) 不用游标的数据删除语句不用游标的数据删除语句【例】删除学号由主变量【例】删除学号由主变量SnoSno决定的学生记录。决定的学生记录。 EXEC SQL DELETEEXEC SQL DELETE FROM FROM 学生学生 WHERE WHERE 学号学号= :Sno= :Sno;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院(2)(2)不用游标的数据修改语句不用
81、游标的数据修改语句【例】将计算机系所有学生的年龄都加上主变量【例】将计算机系所有学生的年龄都加上主变量RaiseRaise。 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 :Rai
82、seid;(3) (3) 不用游标的数据插入语句不用游标的数据插入语句【例】将学号为主变量【例】将学号为主变量SnoSno、课程号为、课程号为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游标名游
83、标名CURSORCURSOR FOR FOR子查询子查询 FOR UPDATE OF FOR UPDATE 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
84、 所在系所在系= :DEPT= :DEPT;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院(2) (2) 打开、推进和关闭游标命令打开、推进和关闭游标命令nEXEC SQL OPEN EXEC SQL OPEN 游标名;游标名;执行对应的查询语句,并将游标指向结果集的第一条记执行对应的查询语句,并将游标指向结果集的第一条记录前。打开的游标处于活动状态,可以被推进。录前。打开的游标处于活动状态,可以被推进。n【例】打开【例】打开SXSX游标。游标。 DEPT= DEPT= 计算机系计算机系 EXEC SQL OPEN SX EXEC SQL OPEN SX;数据数据库技技术与与
85、应用用北京北京邮电大学大学计算机学院算机学院nEXEC SQL FETCHEXEC 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 CL
86、OSE EXEC SQL CLOSE 游标名;游标名; 数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院5.6 5.6 5.6 5.6 数据控制机制和语句数据控制机制和语句数据控制机制和语句数据控制机制和语句5.6.1 5.6.1 数据控制机制数据控制机制1. 1. 授权定义授权定义 具具有有授授权权资资格格的的用用户户,如如DBADBA或或DBODBO,通通过过数数据据控控制制语语言言DCLDCL,将授权决定告知数据库管理系统将授权决定告知数据库管理系统。2. 2. 存权处理存权处理DBMSDBMS把授权的结果编译后存入数据字典中。把授权的结果编译后存入数据字典中。3. 3.
87、 查权操作查权操作 当当提提出出操操作作请请求求时时,系系统统在在数数据据字字典典中中查查找找该该用用户户的的数数据据操操作作权权限限,当当拥拥有有该该操操作作权权时时执执行行其其操操作作,否否则则系系统统将将拒拒绝绝其其操操作。作。数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院5.6.2 5.6.2 数据控制语句数据控制语句1. 1. 授权语句授权语句 GRANTGRANT系统特权组系统特权组ToTo用户组用户组| PUBLIC| PUBLIC WITH GRANT OPTION WITH GRANT OPTION;1) PUBLIC1) PUBLIC指数据库的所有用户。指
88、数据库的所有用户。2) WITH GRANT OPTION:2) WITH GRANT OPTION:获得权限的用户可以把该权限再授予别的获得权限的用户可以把该权限再授予别的用户。用户。 GRANT ALL PRIVILIGES|GRANT ALL PRIVILIGES|对象特权组对象特权组ONON对象名对象名 TO TO用户组用户组| PUBLIC| PUBLIC WITH GRANT OPTION WITH GRANT OPTION;1) ALL PRIVILIGES1) ALL PRIVILIGES指所有的对象特权。指所有的对象特权。2) 2) 对象名指操作的对象标识,如表名、视图名和过
89、程名等。对象名指操作的对象标识,如表名、视图名和过程名等。数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院【例】把修改学生学号和查询学生表的权力授予用户王平。【例】把修改学生学号和查询学生表的权力授予用户王平。 GRANT UPDATE(GRANT UPDATE(学号学号) ),SELECT ON SELECT ON 学生学生 TO TO 王平;王平;【例】把建立数据库和备份数据库的权力赋给用户王平。【例】把建立数据库和备份数据库的权力赋给用户王平。 GRANT CREATE DATABASEGRANT CREATE DATABASE, BACKUP DATABASE TO B
90、ACKUP DATABASE TO 王平;王平;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院2.2.收权语句收权语句REVOKEREVOKE语句的一般格式为:语句的一般格式为: REVOKE REVOKE权限组权限组|ALL PRIVILIGES ON|ALL PRIVILIGES ON对象名对象名 FROM FROM用户名组用户名组| PUBLIC| PUBLIC;其中:其中:ONON子句用于指定被收回特权的对象;子句用于指定被收回特权的对象;ALL PRIVILIGESALL PRIVILIGES指收回所有特权;指收回所有特权;PUBLICPUBLIC指所有用户指所有用
91、户【例】将用户王平的可以在学生表中修改学生学号的权利收回。【例】将用户王平的可以在学生表中修改学生学号的权利收回。 REVOKE UPDATE(REVOKE UPDATE(学号学号) ON ) ON 学生学生 FROM FROM 王平;王平;数据数据库技技术与与应用用北京北京邮电大学大学计算机学院算机学院3.3.拒绝访问语句拒绝访问语句拒绝访问语句的一般格式为:拒绝访问语句的一般格式为: DENY ALL PRIVILIGES | DENY ALL PRIVILIGES | 权限组权限组 ON ON 对象名对象名 TO TO 用户组用户组 | PUBLIC | PUBLIC;其中:其中:ONON子句用于说明对象特权的对象名;对象名指的是表子句用于说明对象特权的对象名;对象名指的是表名、视图名、视图和表的字段名或者过程名。名、视图名、视图和表的字段名或者过程名。