



2.1 SQL语言概述
SQL全称为Structured Query Language(结构化查询语言),它利用一些简单的句子构成基本语法来存取数据库内容。由于SQL简单易学,目前它已经成为关系数据库系统中使用最广泛的语言。
2.1.1 SQL语言的发展
SQL语言由Boyce和Chamberlin于 1974 年首先提出。1975—1979 年间,在IBM San Jose Research Lab的关系数据库管理系统原型System R中,最早使用了该语言。
为了避免各产品之间的SQL语法不兼容,因此由ANSI(American National Standards Institute,美国国家标准局)制定了SQL-92 标准(简称SQL2),定义出SQL的关键词与语法标准,以提高各家产品在SQL语法上的兼容性。
1999 年,SQL标准的最新版本SQL-99(SQL3)发布,在SQL-92 版本的基础上新增了一些特性,标志着SQL在满足用户需求方面又前进了一大步。
目前,SQL标准的最新版本为SQL-2011。大体而言,业界的产品都是在包含ANSI SQL的基础上,扩充自家产品的功能,以求能展现出本身的特色。
当前,大部分的数据库都支持SQL,它已成为操作数据库的标准语言。然而,各DBMS产品对SQL的支持程度也不尽相同。
2.1.2 SQL语言的功能
使用SQL语言可以创建、维护、保护数据库对象,并且可以操作对象中的数据。具体来讲,SQL可实现的功能如下。
◆ 数据定义语言(Data Definition Language,DDL) :主要用于创建、修改或删除数据库对象,如表、视图、索引等。具体功能如下:
●定义、删除、修改关系模式(基本表)。
●定义、删除视图(View)。
●定义、删除索引(Index)。
◆ 数据操纵语言(Data Manipulation Language,DML) :主要用于查询、添加、修改或删除存储在数据库对象中的数据。具体功能如下:
●数据库、表中数据的查询。
●数据的增、删、改等操作。
◆ 数据控制语言(Data Control Language,DCL) :可以控制访问数据库中特定对象的用户,还可以控制用户对数据库的访问类型。主要功能为用户访问权限的授予、收回。
2.1.3 SQL语言的执行方式
SQL语言最主要的执行方式有:交互式SQL、嵌入式SQL以及CLI(调用层接口)等。
1.交互式SQL
交互式SQL是直接执行SQL语句,一般DBMS都提供联机交互工具,可以从前端应用程序,如SQL Server中的Query Analyzer(查询分析器)、Oracle中的SQL*Plus Worksheet,直接与SQL服务器上的数据库进行通信。只要把查询输入到应用程序窗口,再执行SQL语句,就可以获取查询结果。通过这种方式可以迅速检查数据、验证连接和观察数据库对象。SQL语句由DBMS来进行解释。
2.嵌入式SQL
在这种方式中,将SQL语句嵌入到高级语言(宿主语言)中,使应用程序充分利用SQL访问数据库的能力、宿主语言的过程处理能力。例如,可以将SQL语句嵌入C应用程序代码中。在编译代码之前,预处理器将分析SQL语句,并把这些语句从C代码中分离出来。SQL代码被转换成能为RDMS理解的一种格式,其余的C代码则按照正常的方式进行编译。这种方式一般需要预编译,将嵌入的SQL语句转换为宿主语言编译器能处理的语句。
3.CLI(调用层接口)
CLI可以通过接口调用SQL语句。它定义了一套可以从宿主语言调用的公共函数,即提供一套API,通过函数调用实现对DBMS的操作。常用的CLI包括DBLib、OCI、ODBC、JDBC等,将逐步替代嵌入式SQL。
本书中,SQL代码实例的运行采用的是交互式,即在Oracle中的SQL*Plus工具下或等同该工具的其他工具下直接实现。
2.1.4 SQL语句结构
SQL语言由一些简单句子构成基本的语法,所有的SQL语句均有自己的格式,典型的SQL语句(查询语句)结构如图 2.1 所示。
图 2.1 典型的SQL语句结构
SQL语法的基础是子句(clause),子句中会包括一些关键词(keyword)。每条SQL语句均由一个关键词开始,该关键词描述这条语句要产生的动作。SQL中常用的关键词及其功能如表 2.1 所示。
表 2.1 SQL中常用的关键词及其功能
(续表)
2.1.5 SQL环境
SQL环境是指数据在其中可以存在、对数据的SQL操作可以执行的框架。实际上,可以把SQL环境看作运行在某个设备上的数据库管理系统。基本的数据库元素,比如基本表、视图等都是在SQL环境中定义的。SQL环境包含模式、目录等元素,其结构关系如图 2.2 所示。
图 2.2 SQL环境结构关系
1.模式对象
模式对象位于目录的底层,SQL数据就存储在这一层。通过使用SQL,就可以定义SQL对象,并可以修改、存储和操作对象中的数据。实际上,本书所介绍的大部分操作都直接影响到模式对象。
SQL-99 标准定义了表、视图、域、约束、触发器等 11 种类型的模式对象,这些对象构成了SQL环境的基础。
2.模式(Schema)
这里所说的模式是指数据库模式,而不是关系模式,是表、视图、域等数据库模式对象的聚集,它是整个SQL环境体系结构的基本单位。在SQL中,它的创建采用CREATE SCHEMA语句,其语法如下:
CREATE SCHEMA <模式名> <模式元素>
比如,创建一个图书管理模式,包括图书信息、读者信息两个关系(表)和不能再借图书的读者视图,其说明简要描述如下:
如果要把图书管理模式作为当前模式,则设置如下:
SET SCHEMA LibrarySchema
于是,随后定义的表、视图等模式元素均属于管理模式。
3.目录(Catalog)
SQL目录是对某一单个数据库的描述。它是模式的聚集,每个目录都有一个或多个模式,都包含INFORMATION-SCHEMA(信息模式)特殊模式,该模式包含此目录中所有模式的信息。
在目录中建立模式类似于在模式中建立表或视图之类的模式元素。可以用如下语句建立图书管理目录:
CREATE CATALOG LibraryCatalog
后面跟着属于图书管理目录的模式及模式说明。同样,可以用SET CATALOG(设置目录)语句设置当前目录。例如,要把图书管理目录作为当前目录,可进行如下设置:
SET CATALOG LibraryCatalog;
于是,随后定义的模式将属于管理目录。
本节主要对SQL环境涉及的概念做一下简单介绍,在SQL实际应用中,很少涉及模式、目录的创建和使用。
2.1.6 SQL DBMS的客户/服务器模型
在数据库的使用中,经常用到的是客户/服务器模型。关系DBMS模型和SQL都非常适合于使用该模型。其工作过程可简单描述如下。
◆运行在客户端的应用程序接收用户的输入并形成SQL语句,然后将其发送到服务器上的DBMS。
◆DBMS翻译并执行SQL命令,并将结果发送回客户端(工作站)。
◆运行在客户端的应用程序格式化向用户显示结果。
◆SQL的客户程序和服务程序与连接、会话、模块这三个概念紧密地联系在一起。
1.连接
在客户端上运行包含SQL的程序,则需要连接服务程序。可用如下的SQL连接语句,在客户程序和服务程序之间建立连接:
CONNECT TO <服务器名>
AS <连接名>
用户可以建立多个连接,但在任何时间只能有一个是活动的。可以采用如下语句切换连接:
Set Connection <连接名>
访问完毕需要断开连接,语法如下:
Disconnect <连接名>
2.会话
当连接激活时,所执行的SQL操作将在客户程序和服务程序之间形成请求-响应式的交往,这种操作序列称为会话(Session)。
会话与建立它的连接处于同一状态,当连接处于待用状态时,会话也处于待用状态;当连接被激活时,会话也被激活。每个会话都有当前目录和该目录中的当前模式。
3.模块
SQL实现至少为客户端用户提供如下 3 种类型的应用程序(称为模块,Module)之一。
◆通用SQL接口,如交互式SQL。
◆嵌入式SQL,如嵌入于宿主语言中。
◆实际模块,如存储过程等。