结构化查询语言(Structured Query Language,SQL)是关系数据库的标准语言,也是一个通用的、功能极强的关系数据库语言。其功能不仅仅是查询,而是包括数据库模式创建、数据库数据的插入与修改、数据库安全性完整性定义与控制等一系列功能。
本章详细介绍SQL的基本功能,并进一步讲述关系数据库的基本概念。
SQL概述
自SQL成为国际标准语言以后,各个数据库厂家纷纷推出各自的SQL软件或与SQL的接口软件。这就使大多数数据库均用SQL作为共同的数据存取语言和标准接口,使不同数据库系统之间的互操作有了共同的基础。SQL已成为数据库领域中的主流语言,其意义十分重大。有人把确立SQL为关系数据库语言标准及其后的发展称为是一场革命。
SQL的产生与发展
SQL是在1974 年由Boyce和Chamberlin提出的,最初叫Sequel,并在IBM公司研制的关系数据库管理系统原型System R上实现。由于SQL简单易学,功能丰富,深受用户及计算机工业界欢迎,因此被数据库厂商所采用经各公司的不断修改、扩充和完善,SQL得到业界的认可。1986年10月,美国国家标准局(American National Standard Institute,ANSI)的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准,同年公布了SQL标准文本(简称SQL-86)。1987年,国际标准化组织(International Organization for Standardization,ISO)也通过了这一标准。
SQL标准从公布以来随数据库技术的发展而不断发展、不断丰富。下表是SQL标准的进展过程。

2008年、2011年又对SQL2003做了一些修改和补充。可以发现,SQL标准的内容越来越丰富,也越来越复杂。SQL99合计超过1700页。SQL/86和SQL/89都是单个文档。SQL/92和SQL 99已经扩展为一系列开放的部分。例如,SQL/92除了SQL基本部分外还增加了SQL调用接口、SQL永久存储模块;而 SQL 99则进一步扩展为框架、SQL基础部分、SQL调用接口、SQL永久存储模块、SQL宿主语言绑定、SQL外部数据的管理和SQL对象语言绑定等多个部分。
目前,没有一个数据库系统能够支持SQL标准的所有概念和特性。大部分数据库系统能支持SQL/92标准中的大部分功能以及SQL99、SQL2003中的部分新概念。同时,许多软件厂商对SQL基本命令集还进行了不同程度的扩充和修改,又可以支持标准以外的一些功能特性。本书不是介绍完整的SQL,而是介绍SQL的基本概念和基本功能。因此,在使用具体系统时要查阅各产品的用户手册。
SQL的特点
SQL之所以能够为用户和业界所接受并成为国际标准,是因为它是一个综合的、功能极强同时又简洁易学的语言。SQL集数据查询(data query)、数据操纵(data manipulation)、数据定义(data definition)和数据控制(data control)功能于一体,其主要特点包括以下几部分。
①综合统一
数据库系统的主要功能是通过数据库支持的数据语言来实现的。
非关系模型(层次模型、网状模型)的数据语言一般都分为:
模式数据定义语言(Schema Data Definition Language,模式DDL)
外模式数据定义语言(Subschema Data Definition Language,外模式DDL或子模式DDL)。
数据存储有关的描述语言(Data Storage Description Language,DSDL)。
数据操纵语言(Data Manipulation Language,DML)。
它们分别用于定义模式、外模式、内模式和进行数据的存取与处置。当用户数据库投入运行后,如果需要修改模式,必须停止现有数据库的运行,转储数据,修改模式并编译后再重装数据库,十分麻烦。
SQL集数据定义语言、数据操纵语言、数据控制语言的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括以下一系列操作要求:
定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库。
对数据库中的数据进行查询和更新。
数据库重构和维护。
数据库安全性、完整性控制,以及事务控制。
嵌入式SQL和动态SQL定义。
这就为数据库应用系统的开发提供了良好的环境。特别是用户在数据库系统投入运行后还可根据需要随时地、逐步地修改模式,并不影响数据库的运行,从而使系统具有良好的可扩展性。
另外,在关系模型中实体和实体间的联系均用关系表示,这种数据结构的单一性带来了数据操作符的统一性,查找、插入、删除、更新等每一种操作都只需一种操作符,从而克服了非关系系统由于信息表示方式的多样性带来的操作复杂性。例如,在DBTG网状数据库系统中,需要两种插入操作符:STORE用来把记录存入数据库,CONNECT用来把记录插入系值(系值是网状数据库中记录之间的一种联系方式)以建立数据之间的联系。
②高度非过程化
非关系数据模型的数据操纵语言是“面向过程”的语言,用“过程化”语言完成某项请求必须指定存取路径。而用SQL进行数据操作时,只要提出“做什么”,而无须指明“怎么做”,因此无须了解存取路径。存取路径的选择以及SQL的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。
③面向集合的操作方式
非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。例如查询所有平均成绩在80分以上的学生姓名,用户必须一条一条地把满足条件的学生记录找出来(通常要说明具体处理过程,即按照哪条路径,如何循环等)。而SQL采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
④以同一种语法结构提供多种使用方式
SQL既是独立的语言,又是嵌入式语言。作为独立的语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作:作为嵌入式语言,SQL语句能够嵌入到高级语言(例如C、C++、Java)程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL的语法结构基本上是一致的。这种以统一的语法结构提供多种不同使用方式的做法,提供了极大的灵活性与方便性。
⑤语言简洁,易学易用
SQL功能极强,但由于设计巧妙,语言十分简洁,完成核心功能只用了9个动词,如下表所示。SQL接近英语口语,因此易于学习和使用。

SQL的基本概念
支持SQL的关系数据库管理系统同样支持关系数据库三级模式结构。如下图所示,其中外模式包括若干视图(view)和部分基本表(basetable),数据库模式包括若干基本表,内模式包括若干存储文件(stored file)。

用户可以用SQL对基本表和视图进行查询或其他操作,基本表和视图一样,都是关系。
基本表是本身独立存在的表,在关系数据库管理系统中一个关系就对应一个基本表。一个或多个基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。
存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理结构对最终用户是隐蔽的。
视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据。这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。视图在概念上与基本表等同,用户可以在视图上再定义视图。
下面将逐一介绍各SQL语句的功能和格式。为了突出基本概念和基本功能,略去了许多语法细节。各个关系数据库管理系统产品在实现标准SQL时各有差别,与SQL标准的符合程度也不相同,一般在85%以上。因此,具体使用某个关系数据库管理系统产品时,还应参阅系统提供的有关手册。








