Foreword国家精品资源共享课“数据库系统及应用”于2014在“爱课程”网上线,已经3年多了。第一批“十二五”普通高等教育本科国家级规划教材、国家精品资源共享课配套教材《数据库系统原理与设计》(第2版)及配套教材《数据库系统原理与设计实验教程》(第2版)于2012年出版,也已近5年了。该套教材引起数据库界同仁和学生的很大反响,已被全国50余所高校选作教材,4年多共印刷了9次。笔者所在学校针对“数据库系统原理”课程开展翻转课堂教学,从2013年试点到2015年全面实施也已经4年多了。为了更好地适应大数据时代对数据库课程的教学需求,我们从2016年下半年开始着手对本书进行修订。本次修订仍然坚持“培养学生‘三会’数据库”的目标,即会设计数据库、会管理数据库、会开发数据库应用程序,强调数据库设计与应用能力的培养,着重培养学生的应用建模能力,重点是数据库概念模型。第3版对章节进行了适当的调整,使得结构更加合理、可用性更强。
本次修订的主要内容包括:
(1) 对第4、6两章涉及的大学选课系统、网上书店系统数据库设计实例的数据库设计流程进行了重新梳理和调整,以便更好地指导学生开展数据库设计大作业的实践活动。重新梳理和调整后的数据库设计流程为:系统需求分析(需求概述和系统边界、主要业务处理流程、功能需求分析、数据需求分析、业务规则及完整性约束分析)→数据库概念设计(确定基本实体集及属性、主要业务局部概念建模、定义联系集及属性、设计完整ER模型、检查是否满足需求)→数据库逻辑设计及模式求精→数据库物理设计→数据库应用与安全设计。
(2) 将原第3章中的SQL数据定义与更新语言,第9章中的游标、存储过程和触发器等数据库编程的内容独立出来构成新版的第7章SQL数据定义、更新及数据库编程,并新增TSQL语言简介的内容,这样有利于提高学生的数据库编程能力。因此,新版的第3章集中介绍SQL查询语言,有利于学生深刻理解关系数据库逻辑模型,灵活掌握关系代数和SQL查询语言;第3版的第9章集中介绍数据库安全性与完整性,并深入地介绍触发器应用于数据库安全控制和复杂的用户自定义完整性约束。◆数据库系统原理与设计(第3版)(3) 对原第7、8章的内容进行了适当的压缩,并合并作为第3版的第8章数据库存储结构与查询处理。
(4) 删除了原书第12章Web数据库,新增了第12章数据管理技术前沿,主要内容包括:大数据的兴起、大数据处理平台和框架、数据库面临的挑战、NoSQL数据库、NewSQL数据库。设计这一章的目的是让学生了解数据管理技术的前沿,扩展学生的知识面。今后改版时,这一章的内容将与时俱进,不断更新。
(5) 将原第11.3节数据库应用开发实践的主要内容放到与本书配套的《数据库系统原理与设计实验教程》(第3版)中;考虑到ASP开发技术已经过时,将原来的ASP设计实例改为JSP设计实例;第3版的第11.3节简单介绍了对象\|关系映射框架。
(6) 调整了部分章节的内容和顺序,增加和调整了部分章节的例题和习题,对部分概念和文字进行了修改。
(7) 将配套教材《数据库系统原理与设计实验教程》(第3版)中使用的SQL Server 2005平台改为SQL Server 2014。
与其他教材相比,本书的主要特点如下。
(1) 强化对关系数据库模式的理解,以模式导航图为工具,使学生深刻理解关系数据库逻辑模型,灵活掌握关系代数和SQL查询语言。
(2) 以案例为驱动,通过分析应用需求来介绍数据库建模的基本方法,着力培养学生应用建模的能力,重点是使学生深刻理解数据库概念模型,提高数据库设计能力。
(3) 涵盖了关系数据库物理存储结构、查询处理和查询优化等内容,这些内容一是有利于学生更好地理解关系数据库的物理模型,二是有利于学生更好地理解关系数据库管理系统(DBMS)的基本原理,三是有利于学生从底层的角度理解SQL查询。
(4) 从使用者的角度,以应用需求为驱动介绍数据库的安全性、完整性以及事务、并发和恢复等内容,使学生深刻理解关系数据库管理系统(DBMS)的基本原理。
(5) 增加数据库应用开发和数据管理技术前沿介绍,一方面增强学生的实践能力,另一方面让学生了解数据库的前沿和发展方向,为后续的数据库应用开发实践和进一步学习打下基础。
本次修订方案由万常选、廖国琼、吴京慧、刘喜平、刘爱红等讨论确定,万常选负责第1、2、8章的修订,廖国琼负责第4、5、6、10章的修订,吴京慧负责第3、7、9章的修订,刘喜平负责第11、12章的修订。最后,万常选对全书的修订稿进行了修改、补充和总纂。
本书在编写和修订过程中,参阅了大量的参考书目和文献资料,在此向参考资料的作者表示衷心的感谢。
在整个编写和修订过程中,尽管我们一直怀着敬畏的心情、保持严谨的态度,也付出了辛勤的劳动,限于水平,书中不足之处仍然在所难免,敬请各位读者批评指正,并将您的宝贵意见反馈给我们(wanchangxuan@263.net)。我们对您的厚爱致以崇高的敬意!
编者
2017年6月
第3章chapter3
SQL查询语言接正文接标题1.1微型计算机简介学习目标
结构化查询语言(structured query language,SQL)是关系数据库的标准语言,本章主要讲授SQL查询语言在数据库中的应用。目前,几乎所有的关系型数据库管理系统,如Oracle、Sybase、SQL Server和Access等均采用SQL语言标准。因此,本章的教学目标主要有两个,一是要求读者掌握对数据库的基本操作,并了解数据库管理系统的基本功能;二是要求读者熟练掌握SQL查询语句,并运用SQL查询语句完成对数据库的查询操作。学习方法
本章重在实验,因此要求读者结合课堂讲授的知识,强化上机实训,通过实训加深对课堂上学过的有关概念和知识点的理解,以便达到融会贯通的学习目标。学习指南
本章的重点是3.2节、3.3节和3.4节,难点是3.4节。本章导读
(1) SQL查询语句对关系代数运算做了哪些扩展?
(2) 连接查询包括哪些?它们分别用于什么地方?
(3) 在使用分组聚合查询时需要注意什么?
(4) 相关子查询与非相关子查询的概念是什么?
(5) 如何理解存在量词以及存在量词在SQL查询中的重要地位?
(6) 如何理解查询表的概念?查询表与子查询有何异同点?
3.1SQL概述
SQL语言于1974年由Boyce等提出,并于1975—1979年在IBM公司研制的System R数据库管理系统上实现,现已成为国际标准。
自从SQL成为国际标准以来,很多数据库厂商都对SQL语言进行了再开发和扩展,但是包括查询SELECT、插入INSERT、修改UPDATE、删除DELETE、创建CREATE以及对象删除DROP在内的标准SQL语句仍然可被用来完成几乎所有的数据库操作。◆数据库系统原理与设计(第3版)第◆3章SQL查询语言3.1.1SQL发展
SQL语言是关系数据库的标准语言,是数据库领域中一个主流语言,它经历了如下几个阶段。
(1) SQL86: 第一个SQL标准,由美国国家标准局(American National Standard Institute,ANSI)公布,1987年国际标准化组织(International Organization for Standardization,ISO)通过。该标准也称为SQL1。
(2) SQL92: 在1992年,由ISO和ANSI对SQL86进行了重新修订,发布了第二个SQL标准SQL92,该标准也称为SQL2。
(3) SQL99: 随着信息技术的应用,数据库理论和技术得到了广泛的应用和发展。在1999年,ISO发布了反映最新数据库理论和技术的标准SQL99,该版本在SQL2的基础上,扩展了诸多功能,包括递归、触发、面向对象技术等。该标准也称为SQL3。
(4) SQL2003: 该标准是最新的标准,也称SQL4,于2003年发布,包括9个部分。
① ISO/IEC 9075—1: Framework(SQL/Framework);
② ISO/IEC 9075—2: Foundation(SQL/Foundation);
③ ISO/IEC 9075—3: Call Level Interface(SQL/CLI);
④ ISO/IEC 9075—4: Persistent Stored Modules(SQL/PSM);
⑤ ISO/IEC 9075—9: Management of External Data(SQL/MED);
⑥ ISO/IEC 9075—10: Object Language Bindings(SQL/OLB);
⑦ ISO/IEC 9075—11: Information and Definition Schemas(SQL/Schemata);
⑧ ISO/IEC 9075—13: Java Routines and Types Using the Java Programming Language(SQL/JRT);
⑨ ISO/IEC 9075—14: XMLRelated Specifications(SQL/XML)。
目前,许多数据库厂商都支持SQL92的绝大多数标准,以及SQL99和SQL2003的部分标准,并对SQL语言进行了扩展。这些扩展的SQL语言,不仅遵循标准SQL语言规定的功能,而且还增强了许多功能,并赋予SQL不同的名字,如Oracle产品将SQL称为PL/SQL,Sybase和Microsoft SQL Server产品将SQL称为TransactSQL。
SQL语言由4部分组成,包括数据定义语言DDL、数据操纵语言DML、数据控制语言DCL和其他,其功能如下:
(1) 数据定义语言(data definition language,DDL): 主要用于定义数据库的逻辑结构,包括数据库、基本表、视图和索引等,扩展DDL还支持存储过程、函数、对象、触发器等的定义。DDL包括3类语言,即定义、修改和删除。
(2) 数据操纵语言(data manipulation language,DML): 主要用于对数据库的数据进行检索和更新,其中更新操作包括插入、删除和修改数据。
(3) 数据控制语言(data control language,DCL): 主要用于对数据库的对象进行授权、用户维护(包括创建、修改和删除)、完整性规则定义和事务定义等。
(4) 其他: 主要是嵌入式SQL语言和动态SQL语言的定义,规定了SQL语言在宿主语言中使用的规则。扩展SQL还包括数据库数据的重新组织、备份与恢复等功能。
3.1.2SQL特点
SQL语言因其简单、灵活、易掌握,受到了广大用户的接受,SQL语言既可以作为交互式数据库语言使用,也可以作为程序设计语言的子语言使用,它是一个兼有关系代数和元组演算特征的语言,其特点如下所述。
1. 综合统一
(1) SQL语言集数据定义语言DDL,数据操纵语言DML和数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括定义关系模式、录入数据以及建立数据库、查询、更新、维护、数据库重构、数据库安全性控制等一系列操作,这就为数据库应用系统开发提供了良好的环境。例如用户在数据库投入运行后,还可根据需要随时地逐步地修改模式,并不影响数据库的运行,从而使系统具有良好的可扩充性。
(2) 在关系模型中实体和实体间的联系均用关系表示,这种数据结构的单一性带来了数据操作符的统一,即对实体及实体间联系的每一种操作(如查找、插入、删除和修改)都只需要一种操作符。
2. 高度非过程化
非关系数据模型的数据操纵语言是面向过程的语言,在完成某项操作请求时必须指定存取路径。而用SQL语言进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,因此用户无须了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。这不仅大大减轻了用户负担,而且有利于提高数据独立性。
3. 面向集合的操作方式
SQL语言采用集合操作方式,其操作对象、操作结果都是元组的集合。而非关系数据模型采用的是面向记录的操作方式,其操作对象是一条记录。
(1) 非关系数据模型采用的是面向记录的操作方式,任何一个操作的对象都是一条记录。例如: 查询所有平均成绩在80分以上的学生姓名,用户必须说明完成该操作请求的具体处理过程,即如何用循环结构按照某条路径一条一条地把满足条件的学生记录读出来。
(2) SQL语言采用集合操作方式,不仅查询操作的对象是元组的集合,而且一次更新(插入、删除和修改)操作的对象也可以是元组的集合。
4. 同一种语法结构提供两种使用方式
(1) SQL语言既是自含式语言,又是嵌入式语言,且在两种不同的使用方式下,SQL语言的语法结构基本上是一致的。
(2) 作为自含式语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作。
(3) 作为嵌入式语言,SQL语句能够嵌入到高级语言(如Java、VC、VB、Delphi等)程序中,供程序员设计程序时使用。
5. 语言简洁,易学易用
SQL语言功能极强,但十分简洁,易学易用。SQL语言的动词非常少,主要包括:
(1) 数据查询: SELECT;
(2) 数据定义: CREATE、DROP、ALTER;
(3) 数据更新: INSERT、DELETE、UPDATE;
(4) 数据控制: GRANT、REVOKE。
……