《数据库原理教程》由会员分享,可在线阅读,更多相关《数据库原理教程(225页珍藏版)》请在金锄头文库上搜索。
1、2018年9月15日星期六,数据库原理教程,1,普通高等教育十一五规划教材 数据库原理教程,范明、叶阳东、邱保志、职为梅 编著 科学出版社,2008,2018年9月15日星期六,数据库原理教程,2,第4章 关系数据库标准语言SQL,2018年9月15日星期六,数据库原理教程,3,第4章 关系数据库标准语言SQL,4.1 引言 4.2 数据定义 4.3 数据查询 4.4 数据更新 4.5 视图 4.6 嵌入式SQL,2018年9月15日星期六,数据库原理教程,4,4.1 引言,2018年9月15日星期六,数据库原理教程,5,引言,SQL是Structured Query Language的缩写,
2、意为结构化查询语言,是关系数据库的标准语言 SQL是一个通用的、功能极强的关系数据库语言,2018年9月15日星期六,数据库原理教程,6,背景,SQL语言最早称为Sequel,是Boyce和Chamberlin1974年提出的。 Sequel不断发展,并更名为SQL由于SQL 1974年在IBM公司的System R上实现 1986年被美国国家标准局(ANSI)批准为关系数据库语言的美国标准。 1987年国际标准化组织(ISO)通过这一标准 自SQL-92以来,SQL标准的规模开始变大(SQL-89标准大约120页,SQL-92标准超过620页,而SQL-99标准多达1700页) 目前,大多数
3、商品化DBMS支持SQL-92主要部分(初级标准和部分中、高级的标准),并在其他方面有一些扩展 SQL-99扩充太快,过于庞大,DBMS开发商对实现SQL-99似乎不太积极 本书关于SQL的介绍主要基于SQL-92,也介绍SQL-99的部分功能,2018年9月15日星期六,数据库原理教程,7,背景,2018年9月15日星期六,数据库原理教程,8,SQL概述,SQL的功能 SQL的使用方式 SQL的表的类型,2018年9月15日星期六,数据库原理教程,9,SQL概述(续),SQL的功能 SQL的数据定义语言(DDL)提供了模式定义、修改和删除,基本表定义、修改和删除、域定义修改和删除 SQL的数
4、据操纵语言(DML)提供了数据查询子语言。SQL的数据查询子语言是关系完备的,并且具有关系代数和关系演算的双重特征 SQL DML不仅包括数据查询,而且包括数据更新(数据插入、删除和修改)语句,允许用户更新数据库 SQL DDL还允许用户定义视图,并且SQL DML允许用户对视图进行查询和受限的更新操作,2018年9月15日星期六,数据库原理教程,10,SQL概述(续),SQL的功能(续) SQL DDL允许用户定义各种完整性约束条件,并在数据库访问时自动检查,确保数据库操作不会破坏完整性约束条件 SQL DDL还包括授权定义,用来定义用户对数据库对象(基本表、视图等)的访问权限,防止非法访问
5、,确保数据库的安全性 SQL还支持事务,提供了定义事务开始和结束的语句SQL的使用方式 独立使用 嵌入到通用程序设计语言中,2018年9月15日星期六,数据库原理教程,11,SQL概述(续),SQL的表的类型 基本表(base table)持久基本表(persistent base table)全局临时表(global temporary table)局部临时表 (local temporary table) 导出表,2018年9月15日星期六,数据库原理教程,12,SQL的特点,SQL的特点 集多种数据库语言于一体 高度非过程化 面向集合的操作方式 一种语法两种使用方式 功能强大、语言简洁,
6、2018年9月15日星期六,数据库原理教程,13,SQL的特点(续),1. 集多种数据库语言于一体(综合统一) 非关系模型的数据语言一般分为: 模式数据定义语言(模式DDL) 外模式数据定义语言(外模式DDL,子模式DDL) 数据存储有关的描述语言(DSDL) 数据操纵语言(DML) 当用户数据库投入运行后,如果要修改模式,必须停止运行,转储数据,修改模式并编译后再重装数据库,2018年9月15日星期六,数据库原理教程,14,SQL的特点(续),1. 集多种数据库语言于一体(续) SQL语言集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体 可以独立完成数据库生
7、命周期中的全部活动 定义关系模式,插入数据,建立数据库对数据库中的数据进行查询和更新数据库重构和维护数据库安全性、完整性控制等 用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据的运行,2018年9月15日星期六,数据库原理教程,15,SQL的特点(续),2.高度非过程化 非关系数据模型的数据操纵语言“面向过程”,必须使用类似于指针的机制,指定存取路径 SQL只要提出“做什么”,无须了解存取路径。 例如,使用SQL语言表达查询时,用户只需要正确地表达 需要哪些信息 这些信息在哪些关系中 结果元组应当满足什么条件 系统将考察多种执行方案,选择并运行一个最优的执行方案 大大减轻了用户负担
8、 有利于提高数据的独立性,2018年9月15日星期六,数据库原理教程,16,SQL的特点(续),3.面向集合的操作方式 非关系数据模型采用面向记录的操作方式,操作对象是一条记录 SQL采用集合操作方式操作对象、查找结果可以是元组的集合一次插入、删除、更新操作的对象可以是元组的集合,2018年9月15日星期六,数据库原理教程,17,SQL的特点(续),4. 一种语法两种使用方式 SQL是独立的语言 能够独立地用于联机交互的使用方式 SQL又是嵌入式语言SQL能够嵌入到高级语言(例如C,C+,Java)程序中,供程序员设计程序时使用,2018年9月15日星期六,数据库原理教程,18,SQL的特点(
9、续),5 .功能强大, 语言简洁 SQL是一种完整地数据库语言,其功能涵盖数据定义、数据操纵、数据控制等数据管理的主要需求 但SQL语言相对比较简洁,其核心动词只有9个 SQL 语言的语法简单,与英语口语的风格类似,易学易用,2018年9月15日星期六,数据库原理教程,19,4.2 数据定义,2018年9月15日星期六,数据库原理教程,20,4.2 数据定义,SQL的数据定义语言DDL包括 定义模式 域(第5章) 关系(SQL称之为基本表) 视图(4.5节) 索引 断言(第5章) 授权(第5章),2018年9月15日星期六,数据库原理教程,21,SQL的数据类型,SQL支持许多内置的数据类型,
10、并允许用户定义新的域(数据)类型SQL支持的数据类型 CHARACTER CHARACTER VARYING BIT BIT VARYING INTEGER SMALLINT NUMERIC,2018年9月15日星期六,数据库原理教程,22,SQL的数据类型(续),SQL支持的数据类型 DECIMAL FLOAT REAL DOUBLE PRECISION DATE TIME TIMESTAMP INTERVAL,2018年9月15日星期六,数据库原理教程,23,SQL的数据类型(续),CHAR(n):定长字符串,长度n由用户指定。省略(n)时,长度为1。CHAR的全称是CHARACTER。
11、VARCHAR(n):变长字符串,最大长度n由用户指定。VARCHAR的全称是CHARACTER VARYING 定长和变长字符串的差别主要表现在前者需要固定长度的空间,而后者占用的空间在最大长度范围内是可改变的。BIT(n):定长二进位串,长度n由用户指定。省略(n)时,长度为1。 BIT VARYING(n):变长二进位串,最大长度n由用户指定。INT:整数,其值域依赖于具体实现。INT的全称是INTEGER。 SMALLINT:小整数,其值域依赖于具体实现,但小于INT的值域,2018年9月15日星期六,数据库原理教程,24,SQL的数据类型(续),NUMERIC(p, d):p位有效数
12、字的定点数,其中小数点右边占d位 DEC(p, d):p位有效数字的定点数,其中小数点右边占d位。DEC的全称是DECIMAL FLOAT(n):精度至少为n位数字的浮点数,其值域依赖于实现 REAL:实数,精度依赖于实现 DOUBLE PRECISION:双精度实数,精度依赖于实现,但精度比REAL高 DATE:日期,包括年、月、日,格式为YYYY-MM-DD TIME:时间,包括时、分、秒,格式为HH:MM:SS。TIME(n)可以表示比秒更小的单位,秒后取n位 TIMESTAMP:时间戳,是DATE和TIME的结合 INTERVAL:时间间隔。SQL允许对DATE、TIME和INTERV
13、AL类型的值进行计算,2018年9月15日星期六,数据库原理教程,25,SQL的数据类型(续),SQL提供ETRACT(field FROM Var),从DATE、TIME和TIMESTAMP类型变量Var从提取字段field 对于DATE类型的变量,field可以是YEAR、MONTH和DAY; 对于TIME类型的变量,field可以是HOUR、MINUTE和SECOND; 而对于TIMESTAMP类型field可以是YEAR、MONTH、DAY、HOUR、MINUTE和SECOND 例如,如果d是DATE类型,则ETRACT(YEAR FROM d)返回d中的年份,2018年9月15日星期
14、六,数据库原理教程,26,定义、修改和删除基本表,说明: 本章,我们将“表”和“关系”视为同义词(尽管它们实际上有差别) 将“属性”、“属性列”和“列”视为同义词 使用“元组”或“记录”表示表的行 术语“基本表”主要用于表示持久基本表,而“表”泛指基本表和导出表(包括视图),2018年9月15日星期六,数据库原理教程,27,定义、修改和删除基本表(续),符号约定 表示X是需要进一步定义或说明语言成分 X表示X可以缺省或出现一次 X表示X可以出现一次 X | Y表示或者X出现,或者Y出现,但二者不能同时出现 SQL语言的保留字(如CREATE)不区分大小写 为醒目起见,对于SQL语句中的SQL的
15、保留字,我们使用大写SQL语句用分号结束 一个SQL语句可以写在一行或多行中,各种空白符号用于分隔不同的词 良好的语句的书写风格使得程序赏心悦目、易于阅读,2018年9月15日星期六,数据库原理教程,28,定义基本表,创建一个基本表要对基本表命名,定义表的每个列,并定义表的完整性约束条件。 SQL语言使用CREATE TABLE语句创建基本表,其基本格式如下:CREATE TABLE (, , , , ); 是标识符,对定义的基本表命名 圆括号中包括一个或多个,零个或多个,中间用逗号隔开,2018年9月15日星期六,数据库原理教程,29,定义基本表(续),定义每个属性(列)的名称、类型、缺省值
16、和列上的约束条件,格式如下:DEFAULT , , 其中,是标识符,对定义的列命名 定义列的取值类型,它可以是4.2.1节介绍的任意类型,也可以是用户定义的域类型(见5.3节) 可选短语“DEFAULT ”定义列上的缺省值,是中的一个特定值或NULL(空值) 每个列上可以定义零个或或多个约束条件,约束列的取值,2018年9月15日星期六,数据库原理教程,30,定义基本表(续),列约束定义格式如下 CONSTRAINT 其中可选短语“CONSTRAINT ”为列约束命名 常用的列约束包括: NOT NULL:不允许该列取空值 不加NOT NULL限制时,该列可以取空值 PRIMARY KEY:指
17、明该列是主码,其值非空、唯一 UNIQUE:该列上的值必须唯一 相当于说明该列为候选码 CHECK ():指明该列的值必须满足的条件,其中是一个涉及该列的布尔表达式,2018年9月15日星期六,数据库原理教程,31,定义基本表(续),一个表可以包含零个或多个,用于定义主码、其他候选码、外码和表上的其它约束 表约束定义定义形式如下: CONSTRAINT 其中可选短语“CONSTRAINT ”为表约束命名 PRIMARY KEY (A1, , Ak):属性列A1, , Ak构成该关系的主码 当主码只包含一个属性时,也可以用列约束定义主码。 UNIQUE (A1, , Ak):属性列A1, , Ak上的值必须唯一 相当于说明A1, , Ak构成该关系的候选码 当候选码只包含一个属性时,也可以用列约束定义候选码 CHECK ():说明该表上的一个完整性约束条件 通常,是一个涉及该表一个或多个列的布尔表达式,