3.1 SQL概述
结构化查询语言(Structured Query Language,SQL)是关系数据库的标准语言,也是一个通用的、功能极强的关系数据库语言。其功能不仅仅是查询,而是包括数据库模式创建、数据库数据的插入与修改、数据库安全性完整性定义与控制等一系列功能。
3.1.1 SQL的产生与发展
表3.1 SQL标准的进展过程
标准 |
大致页数 |
发布日期 |
SQL/86 |
1986年10月 |
|
SQL/89(FIPS 127-1) |
120页 |
1989年 |
SQL/92 |
622页 |
1992年 |
SQL 99(SQL 3) |
1700页 |
1999年 |
SQL 2003 |
3600页 |
2003年 |
SQL 2008 |
3777页 |
2006年 |
SQL 2011 |
2010年 |
目前,没有一个数据库系统能够支持SQL标准的所有概念和特性。
3.1.2 SQL的特点
SQL集数据查询(data query)、数据操纵(data manipulation)、数据定义(data definition)和数据控制(data control)功能于一体,其主要特点包括以下几部分。
01 综合统一
非关系模型(层次模型、网状模型)的数据语言一般都分为:
(1)模式数据定义语言(Schema Data Definition Language,模式DDL)。
(2)外模式数据定义语言(Subschema Data Definition Language,外模式DDL或子模式DDL)。
(3)数据存储有关的描述语言(Data Storage Description Language,DSDL)。
(4)数据操纵语言(Data Manipulation Language,DML)。
它们分别用于定义模式、外模式、内模式和进行数据的存取与处置。当用户数据库投入运行后,如果需要修改模式,必须停止现有数据库的运行,转储数据,修改模式并编译后再重装数据库,十分麻烦。
SQL集数据定义语言、数据操纵语言、数据控制语言的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括以下一系列操作要求:
>>定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库。
>>对数据库中的数据进行查询和更新。
>>数据库重构和维护。
>>数据库安全性、完整性控制,以及事物控制。
>>嵌入式SQL和动态SQL定义。
用户在数据库系统投入运行后,可根据需要随时逐步修改模式,不影响数据库的运行。
02 高度非过程化
非关系数据模型的数据操纵语言是“面向过程”的语言,用“过程化”语言完成某项请求必须指定存取路径。而用SQL进行数据操作时,只要提出“做什么”,而无须指明“怎么做”,因此无须了解存取路径。存取路径的选择以及SQL的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。
03面向集合的操作方式
非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。SQL采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
04 以同一种语法结构提供多种使用方式
(1)SQL是独立的语言:能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作。
(2)SQL又是嵌入式语言:SQL语句能够嵌入到高级语言(例如C、C++、Java)程序中,供程序员设计程序时使用。
05 语言简洁,易学易用
SQL功能极强,由于设计巧妙,语言十分简洁,完成核心功能只用了9个动词,如表3.2所示。
表3.2 SQL的动词
SQL功能 |
动词 |
数据查询 |
select |
数据定义 |
create,drop,alter |
数据操纵 |
insert,update,delete |
数据控制 |
grant,revoke |
3.1.3 SQL的基本概念
支持SQL的关系数据库管理系统同样支持关系数据库三级模式结构,如图3.1所示。其中外模式包括若干视图(view)和部分基本表(base table),模式包括若干基本表,内模式包括若干存储文件(stored file)。
图3.1 SQL对关系数据库模式的支持
基本表是本身独立存在的表,在关系数据库管理系统中一个关系就对应一个基本表。一个或多个基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。
存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理结构对最终用户是隐蔽的。
视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据。这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。视图在概念上与基本表等同,用户可以在视图上再定义视图。