数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 1页第 9章 SQL语言初步本章概述本章的学习目标主要内容数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 2页本章概述
前面讲过的关系代数和 Datalog语言虽然可以执行数据库的查询,但是他们都是一种形式化的语言,表示了从数据库中提取数据的过程。但是,这些语言不能真正地从数据库的关系实例中提取数据。这些关系代数和 Datalog语言都是理论上的查询语言,是实际的查询语言的理论技术。
本章和下一章将要介绍的 SQL语言,是一种被众多数据库产品广泛使用的实际的查询语言。按照 SQL语言语法编写的各种查询语言可以在数据库中执行各种数据操纵、定义、
控制等操作。
本章将要对 SQL语言的产生背景,SQL检索和更新语言、
SQL定义语言等内容进行详细的介绍,下一章将详细介绍有关 SQL语言的高级特征,例如约束、触发器、游标以及嵌入式语言等内容。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 3页本章的学习目标
了解 SQL语言的发展过程;
掌握使用 SQL语言检索数据的基本技能;
掌握连接、子查询等高级查询技术;
掌握数据更新技术;
掌握各种数据定义语言的功能和涉及的对象;
掌握 SQL语言的递归查询技术。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 4页主要内容
9.1 概述
9.2 简单查询语句
9.3 高级查询语句
9.4 数据库更新语句
9.5 数据定义语句
9.6 递归查询
9.7 动手练习
9.8 本章小结数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 5页
9.1 概述
SQL是结构化查询语言 (Structure Query Language)的简称,是关系型数据库管理系统中最流行的数据查询和更新语言。用户可以使用 SQL语言在数据库中执行各种操作
司的 San Jose研究所提出的,该语言的最初名称是
Sequel。
1986年,国际标准化组织 (International Standard
Organization,ISO)和美国国家标准协会 (American
National Standards Institute,ANSI)共同发布了第一个
SQL标准,即 SQL-86,该标准也称为 SQL-1。
1992年,ISO和 ANSI对 SQL-86进行了重新修订,发布了第二个 SQL标准,即 SQL-92,该标准也称为 SQL-2。
SQL-2标准文本有 600多页。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 6页
SQL查询语言
SQL查询语言包括了所有对数据库的操作,这些操作可以分为四个部分,即数据定义语言、数据操纵语言、数据控制语言和嵌入式 SQL语言。其功能如下所示:
数据定义语言 (Data Definition Language,DDL)主要是定义数据库的逻辑结构,包括定义基本表、视图和索引。从用户的角度来看,基本的 DDL包括三类语言,即定义、修改和删除。
数据操纵语言 (Data Manipulation Language,DML)包括数据检索和数据更新两大类操作,其中数据更新包括插入、删除和修改三种操作。
数据控制语言 (Data Control Language,DCL)包括基本表和视图的授权、完整性规则 的描述以及事务开始和结束等控制语句等。
嵌入式 SQL语言规定了 SQL语句在宿主语言程序中使用的各种规则。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 7页主要内容
9.1 概述
9.2 简单查询语句
9.3 高级查询语句
9.4 数据库更新语句
9.5 数据定义语句
9.6 递归查询
9.7 动手练习
9.8 本章小结数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 8页
9.2 简单查询语句
本节主要介绍最简单的一些查询语句。
查询语句的执行离不开数据库模式实例,
如图 9-2所示的数据库模式实例正是前面我们一直使用的图书管理数据库模式。
我们使用的 SQL查询示例都与该数据库模式有关。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 9页最简单的查询语句
SQL语言中的查询语句使用 SELECT语句来执行。在 SELECT语句中,
最常用的三个关键字分别是 SELECT,FROM和 WHERE。
SELECT子句用于指定属性的名称,只有指定的属性才能在查询集中出现。不过有一点例外,如果希望检索到关系中的所有属性信息,那么可以使用星号 (*)来代替列出所有的属性名称,且列出的属性顺序与关系模式定义的属性顺序相同。
FROM子句用于列出查询所涉及的关系名称。在本章后面将会看到,
在 FROM子句中不仅仅可以列出一个关系的名称,而且可以列出许多关系的名称。当然,列出的关系名称都是将要查询的对象。
WHERE子句用于给出查询的条件,就像关系代数中的选择条件一样,
只有匹配这些条件的元组才能出现在结果中。有关条件的构成形式,
本章将会详细地讲述。
在 SELECT语句的这三个子句中,只有 SELECT和 FROM是必须出现的数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 10页投影
在很多情况下,我们都是根据自己的需要来查询信息的。也就是说,可以把查询涉及的关系投影到某些属性上面,这样可以减少结果中的没有意义的信息量。
例如,假如我们不希望列出每一个元组的所有属性,而只是希望列出图书的书名、价格和出版社信息,那么可以使用如图 9-5所示的查询语句。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 11页选择
在前面的那些示例中,没有使用关键字
WHERE。关键字 WHERE用来对关系中的元组进行条件选择,只有满足关键字
WHERE中指定条件的元组才能出现在结果关系中。
在关键字 WHERE中构造表达式时,可以使用如表 9-1所示的比较运算符。这些比较运算符与普通的编程语言例如 C语言中的使用方法一样。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 12页字符串比较
只有当两个字符串具有相同的字符序列时,
他们才是相等的。字符串比较也是经常遇见的一种条件。这些比较主要有两种形式,
即字符串的大于或小于以及字符串的模糊匹配。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 13页日期和时间的比较
对于时间和日期,不同的 SQL版本有不同的实现方式。通用的日期和时间表示方法如下所述。
日期由关键字 DATE和其后面带引号的特殊格式的字符串表示,例如,DATE ‘2004-02-28’就是一种标准形式。前面 4个字符表示年份,接下来是连字符 (-)和表示月份的数字 02,最后是连字符 (-)
和表示日的数字 28。不够两位数字的月和日,需要在数字前面添加 0补齐。该日期值表示 2004年 2
月 28日。
与日期的表示非常类似,时间由关键字 TIME和其后面带引号的特殊格式的字符串表示数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 14页排序结果
在查询结果的关系中,元组的排列顺序与实际数据的存储顺序相同。由于用户在数据库中不断地执行插入、删除、
修改等操作,关系中数据的存储经常发生变化,因此检索出来的顺序是乱七八糟的。为了满足用户的需要,可以对查询结果关系中的数据进行排序,即把数据按照指定的顺序查询出来。
排序结果数据可以基于一个或多个属性数据。如果第一个属性值相等,那么依据第二个属性值排序,如果仍然相等,
那么依据第三个属性值排序,以此类推。
排序查询结果的操作非常简单,即在 SELECT语句的最后,
也就是 WHERE子句的后面,使用子句 ORDER BY <属性列表 >。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 15页副本
实际上,SQL把关系中的元组作为包来对待,而不是作为集合来对待。所以,查询结果中有可能出现元组的副本。一般地,
我们不希望看到这种出现副本的情况,必须采取办法把这种副本删除。
删除副本的操作也是非常简单的,只需要在 SELECT子句后面的属性列表之前增加关键字 DISTINCT,这样就能保证在查询结果中不出现元组的副本。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 16页主要内容
9.1 概述
9.2 简单查询语句
9.3 高级查询语句
9.4 数据库更新语句
9.5 数据定义语句
9.6 递归查询
9.7 动手练习
9.8 本章小结数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 17页
9.3 高级查询语句
前面介绍的查询语句都是最基本的 SQL操作,这些操作不能充分体现出 SQL语句的强大功能。 SQL语句的强大和灵活,在于可以在一个查询语句中处理多个关系、对关系的查询结果进行集合运算、对关系中的属性值应用聚集函数以及在其他查询语句中嵌套查询语句。
下面将要详细介绍这些高级查询语句。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 18页连接查询类型数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 19页集合查询数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 20页聚集查询
聚集就是把一系列值聚合形成一个值的过程。聚集查询就是把关系中的某一列的值经过聚集函数得到一个单一值的过程,例如,求某个列的平均值、最大值等,并且还可以按照给定的条件进行分组,计算一些合计值。
在 SQL语言中,提供了 5个常用的聚集运算符,如表 9-5所示。这些运算符可以产生某一个列的汇总值。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 21页子查询
子查询就是在其他查询语句中嵌入
SELECT语句。实质上,子查询就是一个对关系求值的表达式,因此大大地增强了
SQL语句的功能。
子查询可以作为一个标量值来使用,也可以用在条件子句中进行判断。注意,子查询必须使用括号括起来。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 22页主要内容
9.1 概述
9.2 简单查询语句
9.3 高级查询语句
9.4 数据库更新语句
9.5 数据定义语句
9.6 递归查询
9.7 动手练习
9.8 本章小结数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 23页
9.4 数据库更新语句
前面主要介绍了检索数据的 SELECT语句,
但是除了检索数据之外,还需要在关系中插入数据、删除或修改关系中已有的数据。
这些操作需要使用数据库更新语句,即
INSERT,DELETE和 UPDATE语句。
下面分别介绍这三个语句。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 24页插入数据
关系中只有插入数据之后,才能供用户查询使用。
插入数据使用 INSERT语句。插入语句的基本组成元素包括:关键字 INSERT INTO、关系名、关系的属性列表、关键字 VALUES和属性值。
INSERT语句的语法形式如图 9-56所示。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 25页删除数据
当关系中的数据不再需要时,可以把这些不需要的数据删除。删除数据使用删除语句 DELETE。
删除语句 DELETE的组成元素包括关键字
DELETE FROM、关系名、关键字 WHERE和一个条件。 DELETE语句的语法形式如图 9-60所示。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 26页修改数据
如果关系中的数据过时了,或插入的数据不正确,那么可以修改这些有问题的数据。修改关系中的数据需要使用
UPDATE语句。 UPDATE语句的组成元素包括关键字
UPDATE、关系名、关键字 SET、设置属性为新值的表达式、关键字 WHERE和条件。 UPDATE语句的语法形式如图 9-63所示。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 27页主要内容
9.1 概述
9.2 简单查询语句
9.3 高级查询语句
9.4 数据库更新语句
9.5 数据定义语句
9.6 递归查询
9.7 动手练习
9.8 本章小结数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 28页
9.5 数据定义语句
前面我们讨论的都是数据操纵语句,这些语句主要是用来操纵关系中已有的数据,例如检索、修改、删除数据,或向关系中插入需要的数据。数据操纵语句有一个前提,即数据库中的关系模式都已经存在。现在,我们就要介绍如何定义这些数据库中的关系模式。只有定义了关系模式,才能向这些关系模式中插入数据,也才能使用这些关系模式中的数据。关系模式也经常称为表。
下面,我们将介绍如何使用 SQL语言中的数据定义语句定义数据库中的关系模式以及其他有关对象。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 29页数据类型和域
在 SQL语言中,提供了两种数据类型,一种是系统提供的数据类型,简称为数据类型,另一种是用户定义的数据类型,称之为域。下面分别介绍这两种数据类型。
数据类型可以指定关系模式中属性的取值特性和范围,是数字化信息的重要基础。在 SQL语言中,
系统提供的数据类型如表 9-7所示。
域是一种基于系统数据类型的用户定义的数据类型。用户可以根据实际的需要,把一些常用的数据类型重新起一个名字保存起来,作为数据类型来引用。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 30页管理表
前面说过,关系模式也称为表。表是数据库模式中最重要的对象,也是数据库操作最多的对象。表的管理操作包括表的定义、修改和删除。
定义表就是把关系模式从无到有创建起来。定义表使用
CREATE TABLE语句,该语句的主要组成元素包括关键字 CREATE TABLE、表名 (关系名 )、圆括号以及圆括号内的属性列表。
修改表也就是更改关系模式。一般来说,关系模式是不需要改变的,是非常稳定的,但是由于实际情况的变化,关系模式的更改也是可能的。
表定义之后,一般在数据库中长期地存在。但是,由于各种原因,表不再需要了,那么可以把其从数据库中删除。
删除表的语句是 DROP TABLE
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 31页默认值
当我们插入元组时,由于缺乏信息或其他原因,
经常无法为所有的分量都指定明确的值。这时,
可能某些列的数据会出现 null值。 null值代表未知、
保密等内容。但是,空值并没有真正地为某一个属性赋值。如何解决既不指定数据但是又可以输入数据的问题呢?默认值可以解决这种问题。
一般地,可以在说明属性和其类型的位置加上关键字 DEFAULT和一个适当的值。这样,当没有为该属性提供值时,系统会自动把该默认值提供给该属性。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 32页索引定义
索引是一种数据结构,它可以加快对表中元组的检索速度、加快表之间的连接速度、加快对表中数据的修改和删除速度等。索引既可以针对一个属性,也可以针对多个属性集。索引这些关键属性进行各种排序处理,以便提高查询速度。
有关索引的详细内容本书第十一章将要详述。
定义索引的 SQL语句不是标准的 SQL语句,但是几乎所有的数据库产品都提供了定义索引的 SQL
语句。定义索引的 CREATE INDEX语句的一般形式如图 9-75所示。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 33页管理视图
前面我们讲过,实际存在的数据库可以称为 EDB,
没有实际存在的数据库称为 IDB。同样,在 SQL
语句中,使用 CREATE TABLE定义的关系实际存在于数据库中,但是使用 CREATE VIEW定义的关系实际上并不存在。这种基于数据库关系的关系称为视图。视图实际上是一种查询语句表达式。但是,视图的使用与表的使用是非常类似的,
可以像表一样对视图执行各种查询操作。
下面详细介绍视图的定义、查询、属性改名、修改数据等内容。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 34页主要内容
9.1 概述
9.2 简单查询语句
9.3 高级查询语句
9.4 数据库更新语句
9.5 数据定义语句
9.6 递归查询
9.7 动手练习
9.8 本章小结数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 35页
9.6 递归查询
递归查询是 SQL3标准新增加的特性。递归查询的理论基础是递归的 Datalog规则。在 SQL语句中,可以使用关键字 WITH引导的语句来定义等价的 IDB关系,然后在 WITH
语句内部使用这些定义。
WITH语句的简单格式如图 9-83所示。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 36页主要内容
9.1 概述
9.2 简单查询语句
9.3 高级查询语句
9.4 数据库更新语句
9.5 数据定义语句
9.6 递归查询
9.7 动手练习
9.8 本章小结数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 37页
9.7 动手练习
下面,我们通过实际操作,来理解 SQL语句的功能。在如图 9-85所示的窗口中,在
Microsoft SQL Server系统中执行了一个简单的 Transact-SQL语句,检索 book表中的所有数据。
数据库系统原理与应用教程 (第二版 ) 第 9章 SQL语言初步 第 38页主要内容
9.1 概述
9.2 简单查询语句
9.3 高级查询语句
9.4 数据库更新语句
9.5 数据定义语句
9.6 递归查询
9.7 动手练习
9.8 本章小结