1、第四章 关系数据库标准语言4.1 SQL4.1 SQL概述及其特点概述及其特点 1.SQL 1.SQL概述概述 按其功能分为四大类按其功能分为四大类 综合统一的一体化的特点综合统一的一体化的特点 高度非过程化高度非过程化 面向集合的操作方式,语言功能强面向集合的操作方式,语言功能强 统一的语法结构,两种使用方式统一的语法结构,两种使用方式 语言简洁,易学易用语言简洁,易学易用 提供数据控制功能提供数据控制功能 提供有数据视图的数据结构提供有数据视图的数据结构 所有关系数据库的公共语言所有关系数据库的公共语言 2.SQL 2.SQL数据库的体系结构数据库的体系结构 按支持按支持SQLSQL的数据
2、库管理系统可称其的数据库管理系统可称其SQLSQL数数据库,其结构基本上采用三级结构,但所用术据库,其结构基本上采用三级结构,但所用术语与传统关系模型的术语有些不同。语与传统关系模型的术语有些不同。4.2 SQL4.2 SQL查询查询 1.1.选择表中的若干列选择表中的若干列4.2.1 4.2.1 单表查询单表查询 仅涉及一个表的查询仅涉及一个表的查询2.2.选择表中的若干元组选择表中的若干元组 ESCAPE ESCAPE 表示表示“”为换码字符为换码字符 3.3.控制行的显示顺序控制行的显示顺序4.4.组函数组函数 SQLSQL提供的五种组函数提供的五种组函数5.5.分组查询分组查询 实现行
3、的分组和分组统计。实现行的分组和分组统计。9600196001丁一丁一CSCS010119199600296002王二王二CSCS010120209600396003张三张三CSCS010121219600496004李四李四CSCS020219199600596005刘五刘五CSCS020220209600796007马蓉马蓉MAMA010120209600896008 司马明司马明MAMA010119199600996009 张胜利张胜利MAMA010120209601096010李力李力CICI02022222CSCS01012020CSCS020219.519.5CSCS0404222
4、2MAMA010119.319.3CICI02022222SELECT FROM WHERE GROUP BY HAVING ORDER BY 投影投影连接连接选取选取分组分组去组去组排序排序4.2.2 4.2.2 连接查询连接查询 涉及两个以上的表涉及两个以上的表1.1.无条件连接无条件连接2.2.等值连接与非等值连接等值连接与非等值连接3.3.表的别名表的别名4.4.自身连接自身连接5.5.外部连接外部连接6.6.复合连接条件复合连接条件4.2.3 4.2.3 嵌套查询嵌套查询 SELECT Sname FROM Student WHERE Sno IN外层查询外层查询/父查询父查询内层查
5、询内层查询/子查询子查询(SELECT Sno FROM SC WHERE Cno=002);(选修了课程号为(选修了课程号为 002课程的学生的学号)课程的学生的学号);1.1.返回单值的子查询返回单值的子查询2.2.返回一组值的子查询返回一组值的子查询多值比较运算符多值比较运算符多值比较运算符多值比较运算符需要配合使用比较运算符需要配合使用比较运算符 ANY ANY 大于子查询结果中的某个值大于子查询结果中的某个值 ALL ALL 大于子查询结果中的所有值大于子查询结果中的所有值 ANY ANY 小于子查询结果中的某个值小于子查询结果中的某个值 ALL=ANY =ANY 大于等于子查询结果
6、中的某个值大于等于子查询结果中的某个值 =ALL =ALL 大于等于子查询结果中的所有值大于等于子查询结果中的所有值=ANY =ANY 小于等于子查询结果中的某个值小于等于子查询结果中的某个值 =ALL =ALL 小于等于子查询结果中的所有值小于等于子查询结果中的所有值=ANY=ANY 等于子查询结果中的某个值等于子查询结果中的某个值 =ALL=ALL 等于子查询结果中的所有值(通常没有实际意义)等于子查询结果中的所有值(通常没有实际意义)!=!=(或(或)ANY ANY 不等于子查询结果中的某个值不等于子查询结果中的某个值!=!=(或(或)ALL ALL 不等于子查询结果中的任何一个值不等于
7、子查询结果中的任何一个值用聚集函数实现用聚集函数实现例例39 SELECT Sname,Sage FROM Student WHERE Sage (SELECT MAX(Sage)FROM Student WHERE Sdept=MA)AND Sdept MA;EXISTS EXISTS表示存在量词,带有表示存在量词,带有EXISTSEXISTS的子查询不的子查询不返回任何实际数据,它只得到逻辑值返回任何实际数据,它只得到逻辑值“真真”或或“假假”。其目标列表达式通常都用。其目标列表达式通常都用*,给出列名无,给出列名无实际意义。实际意义。当子查询的的查询结果集合为非空时,外层的当子查询的的查
8、询结果集合为非空时,外层的WHEREWHERE子句返回真值,否则返回假值。子句返回真值,否则返回假值。NOT EXISTSNOT EXISTS与此相反。与此相反。含有含有ININ的查询通常可用的查询通常可用EXISTSEXISTS表示,但反过来表示,但反过来不一定。不一定。3.3.嵌套查询可以是多层的嵌套查询可以是多层的SELECT Sno,Sname FROM StudentWHERE Sno IN(SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname=数据结数据结构构 );4.4.返回多列的子查询返回多列的子
9、查询5.5.使用多个子查询(多重子查询)使用多个子查询(多重子查询)6.6.子查询中使用表连接子查询中使用表连接7.7.相关子查询相关子查询 用用NOT EXISTSNOT EXISTS谓词表示:谓词表示:SELECT DISTINCT Sno SELECT DISTINCT Sno FROM Score FROM Score SCXSCX WHERE NOT EXISTS WHERE NOT EXISTS (SELECT (SELECT*FROM Score FROM Score SCYSCY WHERE SCY.Sno=WHERE SCY.Sno=9600296002 AND NOT EX
10、ISTS AND NOT EXISTS (SELECT (SELECT*FROM Score SCZ FROM Score SCZ WHERE SCZ.Sno=WHERE SCZ.Sno=SCXSCX.Sno.Sno AND SCZ.Cno=AND SCZ.Cno=SCYSCY.Cno);.Cno);4.2.4 4.2.4 集合查询集合查询4.3 SQL4.3 SQL数据定义数据定义-DDL-DDL 1.1.基本表基本表4.3.1 4.3.1 基本表的定义和修改基本表的定义和修改 2.2.完整性约束的说明完整性约束的说明 1.1.索引的概念索引的概念9810198102981039820198
11、20298101王萍王萍98201黎明黎明98102王萍王萍98202成功成功98103阳光阳光索引表索引表学生表学生表4.3.2 4.3.2 索引索引 2.2.建立索引的目的建立索引的目的3.3.建立索引建立索引 4.4.删除索引删除索引 5.5.索引的自动引用索引的自动引用 6.6.索引的说明索引的说明4.4 SQL4.4 SQL数据操纵数据操纵-DML-DML 要求表必须是已存在的。要求表必须是已存在的。1.1.单行插入单行插入4.4.1 4.4.1 插入数据插入数据 2.2.多行插入多行插入 多行插入也称为表间拷贝,即从一个表中抽多行插入也称为表间拷贝,即从一个表中抽取若干行数据插入到
12、另一个表中。取若干行数据插入到另一个表中。3.3.插入子查询结果插入子查询结果 产生一个表,但这个表的列是从子查询的结产生一个表,但这个表的列是从子查询的结果中全部复制或部分复制,且子查询结果作为表果中全部复制或部分复制,且子查询结果作为表的行插入到表中。的行插入到表中。可以修改表中某些指定列的数据。可以修改表中某些指定列的数据。3.4.2 3.4.2 修改数据修改数据1.1.修改一个或多个元组的值修改一个或多个元组的值2.2.带子查询的修改语句带子查询的修改语句 删除基本表中某些行的数据。删除基本表中某些行的数据。3.4.3 3.4.3 删除数据删除数据4.5 4.5 视图视图(VIEW)(
13、VIEW)1.1.视图的定义与删除视图的定义与删除 任何一个查询结果其本身就是一个表,所以任何一个查询结果其本身就是一个表,所以一个查询可被用于定义一个视图。一个查询可被用于定义一个视图。2.2.视图的查询视图的查询 视图的查询通常是通过转换为基本表的查询视图的查询通常是通过转换为基本表的查询来实现的。即首先把查询转换成等价的对基本表来实现的。即首先把查询转换成等价的对基本表的查询,然后执行修改了的查询(系统从数据字的查询,然后执行修改了的查询(系统从数据字典中取出视图定义,然后把定义中的子查询和视典中取出视图定义,然后把定义中的子查询和视图查询语句结合起来,形成一个修正的查询语图查询语句结合
14、起来,形成一个修正的查询语句)。句)。3.3.视图的更新视图的更新 对视图的更新最终要转换成对基本对视图的更新最终要转换成对基本表的更新,但实际上,在表的更新,但实际上,在RDBMSRDBMS中,并中,并非所有的视图都是可以更新的,有些视非所有的视图都是可以更新的,有些视图的更新不能唯一地有意义地转换成对图的更新不能唯一地有意义地转换成对基本表的更新。基本表的更新。4.4.视图的优点视图的优点 4.6 SQL4.6 SQL数据控制数据控制 RDBMS RDBMS的的SQLSQL数据控制功能必须要数据控制功能必须要能够做到:能够做到:1.1.授权授权-GRANT-GRANT 授权就是给予用户一定
15、的访问特权。授权就是给予用户一定的访问特权。有两种授权:有两种授权:对象对象操作权限操作权限属性列属性列SELECTSELECT、INSERTINSERT、DELETEDELETE、UPDATEUPDATE、ALLALL视图视图同上同上基本表基本表SELECTSELECT、INSERTINSERT、DELETEDELETE、UPDATEUPDATE、ALTERALTER、INDEX INDEX、ALLALL2.2.收回授权收回授权-REVOKE-REVOKE 收回一些已授予用户的权限。收回一些已授予用户的权限。4.7 SQL4.7 SQL的事务处理的事务处理1.1.事务处理的概述事务处理的概述
16、 所谓事务(所谓事务(TransactionTransaction)是指一系列动作)是指一系列动作的组合,这些动作被当作一个整体或一个逻辑的组合,这些动作被当作一个整体或一个逻辑单元来处理。单元来处理。SQLSQL以逻辑工作单元为单位保证数以逻辑工作单元为单位保证数据一致性。据一致性。在数据库中,一个动作是指一个在数据库中,一个动作是指一个SQLSQL更新语更新语句。事务是一组句。事务是一组SQLSQL语句组成的一个逻辑单位。语句组成的一个逻辑单位。事务是一个完整的活动序列,包含一组操作,事务是一个完整的活动序列,包含一组操作,这些操作或者全部成功地执行,此时整个活动序这些操作或者全部成功地执
17、行,此时整个活动序列的所有执行结果都被保存到数据库中。或者都列的所有执行结果都被保存到数据库中。或者都不执行并恢复到执行前的状态,我们说事务已经不执行并恢复到执行前的状态,我们说事务已经回滚。回滚。买东西是一个典型的事务过程:交钱、拿走货物。买东西是一个典型的事务过程:交钱、拿走货物。验货入库也是一个典型的事务过程:来货验收、入库。验货入库也是一个典型的事务过程:来货验收、入库。财务帐目转移:财务帐目转移:A A帐户转到帐户转到B B帐户。帐户。2.2.事务的特性事务的特性事务具有事务具有4 4个特性,简称个特性,简称ACIDACID特性。特性。保证事务保证事务ACIDACID特性是事务的重要
18、任务。特性是事务的重要任务。事务事务ACIDACID特性可能遭破坏的因素有:特性可能遭破坏的因素有:3.3.事务提交事务提交-COMMIT-COMMIT 以明显方式提交当前事务中的所有操作,以明显方式提交当前事务中的所有操作,使之生效并结束当前事务。使之生效并结束当前事务。4.4.事务回退事务回退-ROLLBACK-ROLLBACK 以明显方式取消当前事务所作的数据库改以明显方式取消当前事务所作的数据库改变,以便恢复数据库并结束当前事务。变,以便恢复数据库并结束当前事务。事务的开始和结束可以由用户显式事务的开始和结束可以由用户显式控制。如果用户没有显式地定义事务,控制。如果用户没有显式地定义事
19、务,则由则由DBMSDBMS按缺省规定自动划分事务。按缺省规定自动划分事务。每个事务开始于第一个可执行的每个事务开始于第一个可执行的DMLDML语句。当语句。当出现以下情况之一时,则撤消或结束一个事务。出现以下情况之一时,则撤消或结束一个事务。调用调用COMMITCOMMIT或或ROLLBACKROLLBACK语句(显式控制事务);语句(显式控制事务);发生发生DDLDDL语句;语句;发生错误或故障;发生错误或故障;从数据库退出(从数据库退出(LOGOFFLOGOFF););异常结束(强行中止)。异常结束(强行中止)。如果没有上述五种情况,则在程序正常结束时如果没有上述五种情况,则在程序正常结束时将把整个程序作为一个事务进行提交。在将把整个程序作为一个事务进行提交。在OracleOracle中,中,系统会自动提交最后一个事务。系统会自动提交最后一个事务。4.8 4.8 嵌入式嵌入式SQLSQL