关系数据库语言和SQL.ppt
第4章关系数据库标准语言SQL,第4章关系数据库标准语言SQL,4.1 关系数据语言和SQL4.2 SQL的数据定义功能4.3 SQL的数据查询功能4.4 SQL的数据操纵功能4.5 视图4.6 SQL的数据控制功能4.7 嵌入式SQL,4.1 关系数据语言和SQL,4.1.1 关系数据语言的分类4.1.2 SQL语言概述4.1.3 SQL语言的组成及特点4.1.4 SQL数据库的体系结构4.1.5 关系数据库操作,4.1 关系数据语言和SQL,关系数据语言的分类关系数据语言可以分为四类:(1)关系代数语言,依此为基础的实际语言有ISBL。(2)元组关系演算语言,依此为基础的实际语言有ALPHA。(3)域关系演算语言,依此为基础的实际语言有QBE。(4)具有代数及关系演算双重特点的语言,例如SQL语言。,4.1 关系数据语言和SQL,SQL语言概述SQL最早是1974年由博伊斯(Boyce)和张伯伦(Chamberlain)提出的,1986年10月,美国国家标准局(ANSI)的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准。同年公布了标准SQL文本,1987年6月,国际(准化组织(ISO)把该标准文本采纳为国际标准,称为SQL86。目前,SQL的标准化工作还在继续,新的标准已命名为SQL3,它将包括面向对象和许多新的数据库概念。,4.1 关系数据语言和SQL,SQL语言的组成及特点数据定义语言,主要定义数据库的逻辑结构,包括定义基本表、索引和视图;数据操纵语言,包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和修改操作;数据控制语言(Data Control language,DCL),主要有对基本表和视图的授权、事务控制等。,4.1 关系数据语言和SQL,SQL 的特点主要有:(1)综合统一。SQL语言集DDL、DML、DCL于一体,包括定义关系模式、录入数据、建立数据库、查询、更新、维护、数据库重构、数据库安全性控制等一系列功能。(2)高度非过程化。用户无需了解存取路径,用户只需提出“做什么”,而不必指明“怎么做”。(3)面向集合的操作方式。SQL语言采用集合操作方式,操作对象和操作结果都是关系,因此一次插入、更新、删除、查找操作的对象都可以是元组的集合。,4.1 关系数据语言和SQL,(4)以同一种语法结构提供两种使用方式。SQL既是自含式语言,又是嵌入式语言。(5)语言简洁、易学易用。,4.1 关系数据语言和SQL,SQL数据库的体系结构(1)基本表。基本表是本身独立的表,在SQL中一个关系对应一个表,一个表可以带若干索引。(2)视图。视图是从一个或几个基本表导出的表,它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。(3)用户可以用SQL语言对视图和基本表进行查询。在用户眼中,视图和基本表都是关系。,4.1 关系数据语言和SQL,图4.1 SQL数据库的体系结构,SQL语言支持关系数据库的三级模式结构,如图4.1所示。外模式对应于视图和部分基本表,模式对应于基本表,内模式对应于存储文件。,4.1 关系数据语言和SQL,关系数据库操作,表4.1 SQL 主要功能,4.2 SQL的数据定义功能,关系数据库由模式、外模式和内模式组成,即关系数据库的基本对象是表、视图和索引。因此SQL的数据定义功能包括定义数据库、表、视图和索引,如表4.2所示。SQL的数据定义功能包括对数据库、基本表、视图和索引的创建和撤销操作。,4.2 SQL的数据定义功能,表4.2 SQL的数据定义语句,4.2 SQL的数据定义功能,4.2.1 SQL中的数据类型 4.2.2 数据库的创建和删除 4.2.3 基本表的创建、修改和删除,4.2 SQL的数据定义功能,SQL中的数据类型,表4.3 SQL常用的数据类型,4.2 SQL的数据定义功能,数据库的创建和删除 关系数据库被定义为关系(基本表)、索引和视图的集合。在创建关系、索引和视图前,必须首先创建数据库。在SQL92中,创建数据库可用CREATE SCHEMA语句。但绝大多数的RDBMS(如DB2、SQL Server、Visual Foxpro等)不采用标准SQL中提出的CREATE SCHEMA语句,如SQL Server和Visual Foxpro都用CREATE DATABASE语句来创建一个关系数据库。,4.2 SQL的数据定义功能,当一个数据库及其所属的基本表、视图、索引都不需要时,可以用DROP语句删除(撤销)。在SQL92中,撤销数据库可用DROP SCHEMA 语句。但绝大多数的RDBMS不采用标准SQL中提出的DROP SCHEMA语句,如SQL Server用DROP DATABASE语句来删除一个关系数据库。,4.2 SQL的数据定义功能,基本表的创建、修改和删除(1)创建基本表创建基本表使用CREATE TABLE 语句,其一般格式如下:CREATE TABLE(,.,),4.2 SQL的数据定义功能,(2)修改基本表修改基本表使用ALTER TABLE语句,其一般格式如下:ALTER TABLE ADD COLUMN DROP COLUMN MODIFY 其中ADD子句用于增加新列和新的完整性约束条件,DROP子句用于删除指定的列,MODIFY子句用于修改原有的列定义。,4.2 SQL的数据定义功能,(3)删除基本表DROP TABLE语句用于删除表的定义和表中的数据、建立在表上的索引、视图等,其一般格式如下:DROP TABLE,4.2 SQL的数据定义功能,(4)创建和删除索引索引(index)属于物理存储的路径概念,而不是逻辑的概念。从模式角度来说,索引概念属于内模式。一般来说,索引有两个作用,一是加快查询速度,二是为了有序输出。用户可以根据应用环境的需要,在一个基本表上建立一个或多个索引,以提供多种存取路径,提高查询效率。SQL中,创建索引使用CREATE INDEX 语句,其一般格式如下:CREATE UNIQUE CLUSTER INDEX ON(,.),4.3 SQL的数据查询功能,SQL提供的数据查询语句SELECT功能强大,使用灵活,其一般格式如下:SELECT ALL|DISTINCT,.FROM,.WHERE GROUP BY HAVING ORDER BY ASC|DESC整个语句的意思是:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。有时又将WHERE子句中的“条件表达式”称为“查询条件”,简称为“条件”。,4.3 SQL的数据查询功能,下面以学生管理数据库STUDENTS为例说明SELECT 语句的基本用法。学生管理数据库STUDENT由三个基本表组成:(1)“学生”表,包括:学号、姓名、性别、年龄、系名等项,可记为 S(SNO,SN,SS,SA,SD),码为SNO(2)“课程”表,包括:课程号、课程名、先修课程号等项,可记为 C(CNO,CN,PCNO),码为CNO(3)“选课”表,包括:学号、课程号、成绩等项,可记为 SC(SNO,CNO,SG),码为(SNO,CNO),4.3 SQL的数据查询功能,4.3.1 简单查询 4.3.2 连接查询 4.3.3 嵌套查询 4.3.4 库函数,4.3 SQL的数据查询功能,简单查询(1)选择表中的若干列(这类运算又称为“投影”)查询全体学生的学号与姓名。SELECT SNO,SN FROM S;查询全体学生的详细记录。SELECT*FROM S;查询学生的姓名和出生年份。SELECT SN,2003-SA AS BirthYear FROM S;,4.3 SQL的数据查询功能,(2)用WHERE子句选择满足条件的行常见的查询条件如表5-3所示。,表5-3 常用的查询条件,4.3 SQL的数据查询功能,查找计算机系全体学生的名单。SELECT SN FROM S WHERE SD=CS;查所有选修过课的学生的学号。SELECT DISTINCT SN FROM SC;查询姓名前四个字符为“WANG”的所有学生的姓名及所在系 SELECT SN,SD FROM S WHRERE SN LIKE WANG%;,4.3 SQL的数据查询功能,连接查询 连接查询主要包括等值连接、非等值连接查询、自身连接查询(自身连接)、外连接查询(外连接)和复合条件连接查询(复合条件连接)等。(1)等值与非等值连接查询 用来连接两个表的条件称为连接条件,其一般格式为:.其中比较运算符主要有:=、=、=、!=、!=,4.3 SQL的数据查询功能,此外连接谓词词还可以使用下面形式:.BETWEEN.AND.当连接运算符为=时,称为等值连接。使用其它运算符称为非等值连接。连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的。(2)自身连接连接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,这种连接称为表的自身连接。,4.3 SQL的数据查询功能,嵌套查询 在SQL语言中,一个SELECTFROMWHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HANVIG短语中的查询称为嵌套查询。查询选修了C1课程的学生姓名。SELECT SN FROM S WHERE SNO IN SELECT SNO FROM SC WHERE CN0=C1;,4.3 SQL的数据查询功能,库函数COUNT()对一列中的值计算个数COUNT(*)计算记录个数SUM()求某一列值的总和(此列值必须为数值)AVG()求某一列值的平均值(此列值必须为数值)MAX()求一列中的最大值MIN()求一列中的最小值,4.4 SQL的数据操纵功能,4.4.1 插入数据4.4.2 删除数据 4.4.3 修改数据,4.4 SQL的数据操纵功能,插入数据 SQL中的数据插入语句是INSERT,它有两种使用方式:一次插入一个元组;一次插入一个查询结果表。(1)插入一个元组插入一个元组的INSERT语句格式如下:INSERT INTO(,)VALUES(,),4.4 SQL的数据操纵功能,(2)插入子查询结果插入一个元组的INSERT语句格式如下:INSERT INTO(,)子查询,4.4 SQL的数据操纵功能,删除数据 SQL中的数据删除语句是DELETE,其一般格式为:DELETEFROM WHERE 删除语句的功能是从指定的表中删除满足WHERE子句中的条件表达式的那些元组。,4.4 SQL的数据操纵功能,修改数据 修改数据的语句是UPDATE,其一般格式如下:UPDATESET=,=WHERE,4.5 视图,4.5.1 定义视图4.5.2 删除视图4.5.3 查询视图4.5.4 更新视图4.5.5 视图的优点,4.5 视图,定义视图 SQL语言用CREATE VIEW语句定义视图,其一般格式如下:CTEATE VIEW(,)AS WITH CHECK OPTION其中子查询可以是任意复杂的SELECT 语句。WITH CHECK OPTION表示对视图进行UPDATE和INSERT时要保证更新或插入的行满足视图定义中的条件。,4.5 视图,删除视图删除视图使用语句DROP VIEW,其一般格式如下:DROP VIEW,4.5 视图,查询视图视图定义后,用户就可以像基本表一样对视图进行查询。系统执行对视图的查询时,首先进行有效性检查,检查查询涉及的表、视图等是否在数据库中存在;如果检查有效,系统取出涉及的视图定义,把定义中的子查询和用户对视图的查询结合起来,转换成对基本表的查询,然后再执行这个修改了的查询。,4.5 视图,更新视图更新视图是指通过视图进行数据的插入、删除和修改。由于视图是不存储数据的虚表,因此对视图的更新最终还是转换为对其基本表的更新,4.5 视图,视图的优点(1)视图对数据库的重构提供了一定程度的逻辑独立性。(2)简化了用户观点。视图机制使用户可以将注意力集中在他所关心的数据上。(3)使用户能以多种方式看待同一数据。(4)提供对机密数据的安全保护功能。,4.6 SQL的数据控制功能,授权收回权限,4.6 SQL的数据控制功能,授权 SQL语言用GRANT语句向用户授予操作权限,GRANT语句的一般格式为:GRANT 权限,权限 ON对象类型对象名 TO 用户,用户 WITH GRANT OPTION,4.6 SQL的数据控制功能,表4.4不同对象类型允许的操作权限,4.6 SQL的数据控制功能,收回权限授予的权限可以由DBA或其他授权者用REVOKE语句收回,REVOKE语句的一般格式为:REVOKE 权限,权限 ON对象类型对象名 FROM 用户,用户,4.7 嵌入式SQL,将SQL语言嵌入到某种高级语言如PLl、COBOL、FORTRAN、C、VB中使用,SQL语句负责操纵数据库,而高级语言则负责控制程序流程,这样就可利用高级语言的过程性结构来弥补SQL语言在实现复杂应用方面的不足,从而完成各种复杂的应用处理。这种方式下使用的SQL语言称为嵌入式SQL(Embedded SQL),而嵌入SQL的高级语言称为主语言或宿主语言。,