SQL实用教程(第3版)

SQL实用教程(第3版)"

作者:黄开枝、杨继萍、马海军
ISBN:9787302205975
定价:¥39.80
字数:千字
页数:
出版时间:2009.08.01
开本:
版次:1-1
装帧:
出版社:清华大学出版社
简介

本书读者对象

本书将基于ISO SQL:2006标准介绍SQL编程基础知识,适合各种层次的读者,尤其适合SQL新手,不过需要补强SQL知识的读者也可以从本书受益。无论是在Web开发方面经验丰富的编程人员、数据库管理员,还是初次接触编程和数据库的新手,任何希望深入学习SQL的读者都可从中得到帮助。本书的目标读者包括:

* 数据库设计和SQL编程新手

* 希望进一步了解SQL数据库实现和访问方法的分析员或管理员

* 希望深入学习编程知识的数据库管理员

* 需要针对SQL数据源执行特殊查询的技术支持专家或测试/QA工程师

* 编写应用程序时需要访问SQL数据库的Web开发人员

* 需要将SQL嵌入应用程序源代码的3GL(第三代)编程人员

* 希望学习如何编写用于在RDBMS中创建和访问数据库的SQL代码的其他读者

无论属于哪一类读者,在学习本书时都应该记住:本书介绍的是标准SQL,而不是某种产品特有的语言版本。这样做的优点在于读者能够将本书介绍的技能灵活地应用到实际环境中,而无须受到具体产品标准的限制。当然,读者仍然必须掌握如何在具体产品中实现SQL,但是利用本书介绍的基础知识,读者可以在不同的RDBMS之间进行转换,而且能够基本了解SQL的使用方法。因此,无论使用何种产品,本书都适合于学习基于SQL数据库知识的新手。而对于SQL编程人员来说,他们只需将所学的知识应用到具体的RDBMS中。

本书具体内容

本书分为3部分。第1部分介绍SQL的基本概念,解释如何在数据库中创建对象。第2部分介绍如何在数据库中检索数据,如何修改存储在数据库中的数据。第3部分介绍高级数据访问技术,可以扩展在第1和第2部分学习的内容。除了这3部分内容以外,本书还包括附录部分,提供书中介绍信息的参考资料。

前言

前    言

关系数据库已经成为现代计算机应用程序的最常用数据存储机制。编程语言(如Java、C和COBOL)和脚本语言(如Perl、VBScript和JavaScript)必须经常访问数据源,才能检索或修改数据。这样的数据源大部分由RDBMS(关系数据库管理系统)进行管理,后者包括Oracle、Microsoft SQL Server、MySQL和DB2等。RDBMS依靠SQL(结构化查询语言)创建和修改数据库对象,向数据库添加数据并从中删除数据,修改已添加到数据库中的数据,而且可以检索存储在数据库中的数据用于显示和处理。

SQL是实现关系数据库的最常用语言。就像数学是自然科学的语言一样,SQL是关系数据库的语言。SQL不仅可以管理数据库中的数据,而且可以管理数据库本身。利用SQL语句,可以通过交互式客户端应用程序或者应用程序编程语言、脚本语言直接访问SQL数据库。无论使用哪种方法访问数据源,都必须具备编写SQL语句的基础知识,才能访问关系数据。本书将介绍这些基础知识,其中包括SQL支持的语句类型,以及如何使用这些语句管理数据库及其数据。通过本书的学习,读者可以较好地掌握SQL基础知识,全面了解如何使用SQL访问关系数据库中的数据。

经过更新以后,本书增加了ISO SQL:2006的规定和2007年发布的技术勘误表。新增的第18章将介绍SQL/XML,这是2006年新添加的SQL标准。此外,SQL语句被重新格式化,所有数据库对象的名称都改为大写字母,以改善各种RDBMS商业产品之间的可读性和可传输性。

本书读者对象

本书将基于ISO SQL:2006标准介绍SQL编程基础知识,适合各种层次的读者,尤其适合SQL新手,不过需要补强SQL知识的读者也可以从本书受益。无论是在Web开发方面经验丰富的编程人员、数据库管理员,还是初次接触编程和数据库的新手,任何希望深入学习SQL的读者都可从中得到帮助。本书的目标读者包括:

* 数据库设计和SQL编程新手

* 希望进一步了解SQL数据库实现和访问方法的分析员或管理员

* 希望深入学习编程知识的数据库管理员

* 需要针对SQL数据源执行特殊查询的技术支持专家或测试/QA工程师

* 编写应用程序时需要访问SQL数据库的Web开发人员

* 需要将SQL嵌入应用程序源代码的3GL(第三代)编程人员

* 希望学习如何编写用于在RDBMS中创建和访问数据库的SQL代码的其他读者

无论属于哪一类读者,在学习本书时都应该记住:本书介绍的是标准SQL,而不是某种产品特有的语言版本。这样做的优点在于读者能够将本书介绍的技能灵活地应用到实际环境中,而无须受到具体产品标准的限制。当然,读者仍然必须掌握如何在具体产品中实现SQL,但是利用本书介绍的基础知识,读者可以在不同的RDBMS之间进行转换,而且能够基本了解SQL的使用方法。因此,无论使用何种产品,本书都适合于学习基于SQL数据库知识的新手。而对于SQL编程人员来说,他们只需将所学的知识应用到具体的RDBMS中。

本书具体内容

本书分为3部分。第1部分介绍SQL的基本概念,解释如何在数据库中创建对象。第2部分介绍如何在数据库中检索数据,如何修改存储在数据库中的数据。第3部分介绍高级数据访问技术,可以扩展在第1和第2部分学习的内容。除了这3部分内容以外,本书还包括附录部分,提供书中介绍信息的参考资料。

下面简单介绍本书的内容和章节划分。

第1部分:关系数据库和SQL

第1章:关系数据库及SQL导论

本章介绍构成SQL基础的关系数据库和关系模型,同时还将概括介绍SQL及其与RDBMS的关系。

第2章:研究SQL环境

本章介绍构成SQL环境的组成部分,还介绍组成模式的对象,以及如何在SQL环境中创建模式。本章还将在支持数据库对象创建的SQL实现过程中,介绍创建数据库对象的概念。

第3章:创建和修改表

本章介绍如何创建SQL表、指定列数据类型、创建用户定义的类型和指定列的默认值,同时介绍如何修改表定义,以及如何从数据库中删除该定义。

第4章:增强数据完整性

本章介绍如何在SQL表中使用完整性约束增强数据完整性,同时介绍与表相关的约束、断言和域约束。本章还将介绍如何创建NOT NULL、UNIQUE、PRIMARY  KEY、FOREIGN KEY和CHECK约束。

第5章:创建SQL视图

本章介绍如何在SQL数据库中添加视图,同时还将介绍如何创建可更新的视图,以及如何从数据库中撤销视图。

第6章:管理数据库的安全

本章将介绍SQL安全模型以及如何在会话环境中定义授权标识符,还将介绍如何创建和删除角色、授予和撤销权限和角色。

第2部分:数据访问和修改

第2部分介绍如何访问和修改数据库中的数据,同时还将介绍如何使用谓语、函数和值表达式管理数据,以及如何连接表,如何使用子查询访问多个表中的数据。

第7章:查询SQL数据

本章介绍SELECT语句的基本组成部分,以及如何使用SELECT语句从SQL数据库中检索数据。同时还将介绍如何定义可以包括在SELECT语句中的所有子句,以及如何在查询数据库时处理这些子句。

第8章:修改SQL数据

本章介绍如何修改SQL数据库中的数据,包括如何插入、更新和删除数据。本章还将介绍SQL语句中能够执行这些数据修改的所有组件。

第9章:谓语

本章介绍如何使用谓语比较SQL数据、返回空值、返回类似的值、引用附加数据源和量化比较谓语,还将介绍各种类型的谓语,以及如何使用谓语从SQL数据库中检索特定的数据。

第10章:函数和值表达式

本章介绍如何在SQL语句中使用各种类型的函数和值表达式,以及如何在SQL语句的各种子句中使用集合函数、值函数、值表达式和特殊值。

第11章:访问多个表

本章介绍如何连接表,以便从这些表中检索数据。还将介绍如何执行基本的连接操作、通过共享列名连接表、使用条件连接和执行联合操作。

第12章:使用子查询访问和修改数据

本章介绍如何创建返回多个行和只返回一个值的子查询,还介绍如何使用关联子查询和嵌套子查询,以及如何使用子查询修改数据。

第3部分:高级数据访问技术

第3部分介绍高级数据访问技术,如调用SQL的例程、触发器和游标。同时还将介绍如何管理事务,如何从主机程序访问SQL数据,以及如何把XML数据集成到数据库中。

第13章:创建SQL调用例程

本章介绍调用SQL的例程及其在SQL数据库中的创建方法,还将介绍定义输入参数、在例程中添加局部变量、使用控制语句和输出参数的方法。

第14章:创建SQL触发器

本章介绍SQL触发器,以及在SQL数据库中插入、更新和删除触发器的方法,还将介绍自动调用触发器的方法、触发器执行的动作类型。

第15章:使用SQL游标

本章介绍如何使用SQL游标从结果集中一次检索一行数据,如何声明游标、打开和关闭游标,如何从游标中检索数据。还将介绍在利用游标提取一行数据以后,如何使用定位UPDATE和DELETE语句。

第16章:管理SQL事务

本章介绍如何使用事务保证SQL数据的完整性,还将介绍如何设置事务属性、启动事务、设置约束递延性、创建事务保存点和终止事务。

第17章:从主机程序访问SQL数据

本章介绍SQL标准支持的4种访问SQL数据库的方法,还将介绍如何从客户端应用程序直接调用SQL、在程序中嵌入SQL语句、创建SQL客户端模型和使用SQL调用级接口访问数据。

第18章:XML数据

本章介绍如何把XML数据集成到SQL数据库中,并具体介绍XML的基础知识,如何使用XML数据类型在表的列值中存储XML,如何编写可以从格式化为XML的数据库返回数据的SQL/XML函数,如何编写描述SQL值和XML值转换方法的SQL/XML映射规则。

第4部分:附录

附录包含前三部分内容的参考资料。

附录A:思考和练习答案

提供每章后面“思考和练习”题的答案。

附录B:SQL:2006关键字

列举SQL:2006标准定义的SQL语句中使用的保留关键字和未保留关键字。

附录C:本书项目中使用的SQL代码

列出本书各章“项目”中使用的所有SQL代码,方便读者查阅,还可以在http://www.mhprofessional.com上下载这些代码。

内容特色

本书每一章都关注一组相关任务,包括与这些任务有关的各种概念的背景知识,如何创建完成这些任务的SQL语句,举例说明如何创建SQL语句。另外,每一章还提供了附加内容,帮助读者理解这一章的内容:

* 专家问答  每章都包括一到两个“专家问答”部分,介绍与各章内容有关的疑难问题及解答。

* 思考和练习  各章最后都有“思考和练习”题,测试读者对各章内容的掌握程度,答案见附录A。

SQL语法

SQL语句的语法是指用于SQL语句的结构和规则,见SQL:2006标准。大多数章节都包括一个或多个语句的语法,以帮助读者理解这些语句中包含的基本组成部分。例如,下面的语法给出了定义CREATE TABLE语句时需要的信息:

<table definition> ::=

CREATE [ { GLOBAL | LOCAL } TEMPORARY ] TABLE <table name>

( <table element> [ { , <table element> } . . . ] )

[ ON COMMIT { PRESERVE | DELETE } ROWS ]

注意:

此时不需要考虑SQL代码的含义,本例仅用于说明本书表示SQL语句的方法。

可以看到,SQL语句可能包含许多组成部分,而且其中的大部分单词都是大写形式,这些单词是表述SQL语句的SQL关键字(SQL:2006关键字的完整列表见附录B)。SQL并不要求关键字采用大写形式,本书使用这种约定的目的在于帮助读者快速识别语句中的关键字。除了关键字以外,SQL语句的语法还包括其他内容,用于帮助定义创建特定语句的方法:

* 方括号  方括号表示其中的语法是可选的。例如,CREATE TABLE语句中的ON COMMIT子句就是可选的。

* 尖括号  尖括号包括表示占位符的信息。在实际创建语句时,占位符将被适当的SQL元素或标识符代替。例如,在定义CREATE TABLE语句时,应当用表的名称代替<table name>占位符。

* 大括号  大括号可以把元素组合在一起,这时必须首先决定如何处理大括号中的内容,然后决定如何加入到语句中。例如,关键字组PRESERVE | DELETE包括在大括号内。必须首先选择PRESERVE或DELETE,然后处理整行代码。因此,这个子句可以是ON COMMIT PRESERVE ROWS,也可以是ON COMMIT DELETE ROWS。

* 竖线  竖线表示“或”关系,这意味着可以使用选项PRESERVE或DELETE。

* 三个句点  表示可以根据需要重复子句。例如,可以根据需要添加多个表元素(由<table element>表示)。

* 冒号/等号::=(两个冒号加上一个等号) 表示符号左边的占位符由符号右边的语法定义。在前面的语法示例中,<table definition>占位符等于组成CREATE TABLE语句的语法。

利用语法可以构建SQL语句,从而根据需要创建数据库对象或者修改SQL     数据。但是,为了更好地演示所应用的语法,每章还提供了实际SQL语句的示例。

SQL语句的示例

每章都提供了在访问SQL数据库时如何实现SQL语句的示例。例如,读者可能会看到类似下面的SQL语句:

CREATE TABLE ARTISTS

( ARTIST_ID INT,

   ARTIST_NAME VARCHAR(60),

   ARTIST_DOB DATE,

   POSTER_IN_STOCK BOOLEAN );

这个语句采用了特殊的字体,表示这是SQL代码。另外,其中的关键子和对象名都采用大写形式(现在不必关心其他细节)。

本书中的示例都是纯SQL代码,这意味着这些代码都基于SQL:2006标准。不过,在某些情况下,SQL实现过程并不严格按照该标准中定义的方式支持SQL语句。因此,还必须参考具体产品的文档,以确保SQL语句符合该产品的SQL实现方式。这样的变化有时非常小,但是产品语句偶尔也会与标准SQL语句相差甚远。

每章中的示例都基于一个与光盘库存量相关的数据库,但是这些示例不一定与数据库对象使用的名称和定义这些对象的方式相符。例如,不同的两章可能都包含引用表名为CD_INVENTORY的示例。但是,无法保证不同示例中使用的表都由相同的列组成,或者包含相同的内容。由于每个示例只关注SQL的特定方面,所以示例中使用的表将根据该示例需要的具体方式来定义。不过,这种情况不适用于“项目”练习题,它们将使用一致的数据库结构。

“项目”练习题

本书每章都包含一到两个“项目”练习题,读者可以将所学内容应用其中。每个练习题都由若干步骤组成,逐步介绍完成具体任务的整个过程。许多项目都包含相关的文件,可以从Web站点http://www.osborne.com下载,而且这些文件通常包含“项目”练习题中使用的SQL语句。另外,附录C中也包含这些SQL语句。

“项目”练习题基于INVENTORY数据库。读者可以创建这个数据库,创建数据库中的表和其他对象,向表中添加数据,然后操纵这些数据。由于这些项目循序建立,所以最好按照项目在本书中的出现顺序完成项目。对于第1部分的项目尤其如此,其中将创建数据库对象;第7章的项目也是如此,其中将把数据插入表。但是,如果打算跳过这些内容,那么可以参考附录C,其中提供了创建数据库对象和利用数据填充表时需要的所有代码。

完成本书中的大部分“项目”练习时必须访问RDBMS,这样存在以交互方式输入和执行SQL语句。如果打算通过网络访问RDBMS,则需要询问数据库管理员,确保使用创建数据库和模式时所需的证书登录。要创建这些对象,可能还需要获得特别的许可。此外,还要验证是否有创建数据库时应当包括的参数(如日志文件大小)、名称限制或其他限制。在使用数据库产品之前,必须阅读产品文档。

??

??

??

??

X    SQL实用教程(第3版)

    IX

目录

目    录

第1部分  关系数据库和SQL

第1章  关系数据库及SQL导论 2

1.1  关系数据库 3

1.1.1  关系模型 4

项目1-1  规范化数据和

识别联系 10

项目小结 11

1.2  了解SQL 11

1.2.1  SQL的演变 12

1.2.2  SQL语句的类型 14

1.2.3  执行的类型 15

1.2.4  SQL标准和产品

实现方式 16

项目1-2  连接数据库 18

项目小结 20

1.3  思考与练习 20

第2章  研究SQL环境 21

2.1  了解SQL环境 22

2.2  了解SQL 23

2.2.1  模式 25

2.2.2  模式对象 25

2.2.3  数据库 27

2.3  在SQL环境中命名对象 29

2.4  创建模式 31

2.5  创建数据库 32

项目2-1  创建数据库和

模式 33

项目小结 34

2.6  思考与练习 34

第3章  创建和修改表 36

3.1  创建SQL表 37

3.2  指定列数据类型 40

3.2.1  字符串数据类型 41

3.2.2  数字数据类型 42

3.2.3  日期数据类型 43

3.2.4  间隔数据类型 44

3.2.5  布尔数据类型 45

3.2.6  使用SQL数据

类型 46

3.3  创建用户定义类型 47

3.4  指定列默认值 48

项目3-1  创建SQL表 49

项目小结 50

3.5  删除SQL表 51

项目3-2  修改和删除

SQL表 53

项目小结 53

3.6  思考与练习 54

第4章  增强数据完整性 55

4.1  了解完整性约束 56

4.2  使用NOT NULL约束 57

4.3  添加UNIQUE约束 58

4.4  添加PRIMARY KEY

约束 60

4.5  添加FOREIGN KEY约束 63

4.5.1  MATCH子句 67

4.5.2  <参照触发动作>

子句 68

项目4-1  添加NOT NULL

约束、唯一约束

和参照约束 69

项目小结 72

4.6  定义CHECK约束 72

4.6.1  定义断言 75

4.6.2  创建域和域约束 75

项目4-2  添加CHECK

约束 76

项目小结 76

4.7  思考与练习 76

第5章  创建SQL视图 78

5.1  在数据库中添加视图 79

5.2  创建可更新视图 86

5.3  从数据库中删除视图 89

项目5-1  在数据库中

添加视图 90

项目小结 91

5.4  思考与练习 91

第6章  管理数据库的安全 93

6.1  了解SQL安全模型 94

6.1.1  SQL会话 95

6.1.2  访问数据库对象 97

6.2  创建和删除角色 99

6.3  授予和取消权限 100

6.4  授予和取消角色 104

项目6-1  管理角色和

权限 106

项目小结 107

6.5  思考与练习 107

第2部分  数据访问和修改

第7章  查询SQL数据 110

7.1  使用SELECT语句检索

数据 111

7.2  使用WHERE子句定义

搜索条件 116

7.3  使用GROUP BY子句分

组查询结果 121

7.4  使用HAVING子句指定

分组搜索条件 126

7.5  使用ORDER BY子句排

序查询结果 128

项目7-1  查询INVENT-

ORY数据库 130

项目小结 133

7.6  思考与练习 133

第8章  修改SQL数据 135

8.1  插入SQL数据 136

8.2  更新SQL数据 141

8.3  删除SQL数据 144

项目8-1  修改SQL

数据 145

项目小结 147

8.4  思考与练习 148

第9章  谓语 149

9.1  比较SQL数据 150

9.2  返回空值 155

9.3  返回近似值 158

项目9-1  在SQL语句中

使用谓语 160

项目小结 162

9.4  引用其他数据源 162

9.4.1  IN谓语 162

9.4.2  EXISTS谓语 165

9.5  量化比较谓语 168

9.5.1  SOME和ANY

谓语 168

9.5.2  ALL谓语 169

项目9-2  在谓语中使用

子查询 171

项目小结 172

9.6  思考与练习 173

第10章  函数和值表达式 174

10.1  使用集合函数 175

10.1.1  COUNT函数 176

10.1.2  使用MAX和

MIN函数 177

10.1.3  使用SUM函数 179

10.1.4  使用AVG函数 180

10.2  使用值函数 180

10.2.1  使用字符串值

函数 181

10.2.2  使用日期值函数 183

10.3  使用值表达式 185

10.3.1  数字值表达式 185

10.3.2  CASE值表达式 187

10.3.3  CAST值表达式 190

10.4  使用特殊值 191

项目10-1  使用函数和

值表达式 192

项目小结 194

10.5  思考与练习 194

第11章  访问多个表 196

11.1  执行基本的连接运算 197

11.1.1  使用相关名称 200

11.1.2  在两个以上的表

之间创建连接 201

11.1.3  创建交叉连接 201

11.1.4  创建自连接 202

11.2  利用共享列名连接表 203

11.2.1  创建自然连接 204

11.2.2  创建命名列

连接 204

11.3  使用条件连接 205

11.3.1  创建内连接 205

11.3.2  创建外连接 207

11.4  执行联合运算 209

项目11-1  查询多个表 212

项目小结 213

11.5  思考与练习 213

第12章  使用子查询访问和修

改数据 214

12.1  创建返回多个数据行的

子查询 215

12.1.1  使用IN谓语 215

12.1.2  使用EXISTS

谓语 217

12.1.3  使用量化比较

谓语 218

12.2  创建返回一个值的子

查询 219

12.3  使用相关子查询 220

12.4  使用嵌套子查询 221

12.5  使用子查询修改数据 223

12.5.1  使用子查询插入

数据 224

12.5.2  使用子查询更新

数据 224

12.5.3  使用子查询删除

数据 225

项目12-1  使用子查询 225

项目小结 229

12.6  思考与练习 229

第3部分  高级数据访问技术

第13章  创建SQL调用例程 232

13.1  了解SQL调用例程 233

13.1.1  SQL调用过程和

函数 234

13.1.2  基本语法 234

13.2  创建SQL调用过程 235

13.3  在过程中添加输入参数 238

13.4  在过程中添加局部变量 241

13.5  使用控制语句 243

13.5.1  创建复合语句 243

13.5.2  创建条件语句 244

13.5.3  创建循环语句 246

项目13-1  创建SQL调

用过程 248

项目小结 249

13.6  在过程中添加输出参数 249

13.7  创建SQL调用函数 250

项目13-2  创建SQL调用

函数 252

项目小结 253

13.8  思考与练习 253

第14章  创建SQL触发器 255

14.1  了解SQL触发器 256

14.2  创建SQL触发器 258

14.2.1  引用旧数据和新

数据 259

14.2.2  删除SQL触

发器 260

14.3  创建插入触发器 260

14.4  创建更新触发器 263

14.5  创建删除触发器 266

项目14-1  创建SQL

触发器 268

项目小结 270

14.6  思考与练习 271

第15章  使用SQL游标 272

15.1  了解SQL游标 273

15.2  声明游标 276

15.2.1  语法中的可选项 276

15.2.2  创建游标声明 279

15.3  打开和关闭游标 282

15.4  检索游标返回的数据 282

15.5  使用定位UPDATE和

DELETE语句 286

15.5.1  使用定位UPDATE

语句 286

15.5.2  使用定位DELETE

语句 288

项目15-1  使用SQL

游标 288

项目小结 291

15.6  思考与练习 291

第16章  管理SQL事务 293

16.1  了解SQL事务 294

16.2  设置事务属性 296

16.2.1  指定隔离级别 297

16.2.2  指定诊断尺寸 301

16.2.3  创建SET TRANSA-

CTION语句 301

16.3  启动事务 302

16.4  设置约束延迟性 303

16.5  在事务中创建保存点 305

16.6  终止事务 307

16.6.1  提交事务 308

16.6.2  回滚事务 308

项目16-1  处理事务 310

项目小结 312

16.7  思考与练习 312

第17章  访问主机程序中的

SQL数据 313

17.1  直接调用SQL 314

17.2  在程序中嵌入SQL

语句 315

17.2.1  创建嵌入式SQL

语句 316

17.2.2  在SQL语句中使

用主机变量 317

17.2.3  检索SQL数据 319

17.2.4  处理错误 321

项目17-1  嵌入SQL

语句 322

项目小结 324

17.3  创建SQL客户端模块 324

17.4  使用SQL调用级接口 326

17.4.1  分配句柄 327

17.4.2  执行SQL语句 330

17.4.3  使用主机变量 331

17.4.4  检索SQL数据 331

项目17-2  使用SQL

调用级接口 332

项目小结 334

17.5  思考与练习 334

第18章  处理XML数据 336

18.1  XML基础知识 337

18.2  了解SQL/XML 339

18.2.1  XML数据类型 340

18.2.2  SQL/XML函数 341

18.2.3  SQL/XML映射

规则 342

项目18-1  使用SQL/XML

函数 345

项目小结 345

18.3  思考与练习 346

附录  思考与练习答案 347

??

??

??

??

XIV    SQL实用教程(第3版)

      XIII

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个