iLike就业SQL多功能教材
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 SQL基础

SQL(Structured Query Language)的全称是结构化查询语言,是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。SQL是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础。现在几乎所有的数据库均支持SQL。

1.2.1 SQL的发展

SQL是1974年由Boyce和Chamberlin提出的,1975年至1979年IBM公司San Jose Research Laboratory研制了关系数据库管理系统的原型系统System R,并实现了这种语言。它的前身是1972年提出的SQUARE (Specifying Queries as Relational Expression),在1974年Boyce和Chamberlin把SQUARE修改为SEQUEL(Structured English Query Language)语言。SQUARE和SEQUEL在本质上是相同的,其差别是SQUARE较多地使用数学符号,而SEQUEL用英语单词表示操作、用结构式的语法规则描述操作,看起来更像是英语句子。后来SEQUEL简称为SQL,即结构化的查询语言。SQL虽然命名为查询语言,但实际上具有定义、查询、更新和控制等多种功能。

由于SQL使用方便、功能丰富、语言简洁易学,很快得到推广和应用。例如关系数据库管理系统产品SQL Server,DB2,Oracle,Sybase等都实现了支持SQL。同时,其他数据库产品的厂家纷纷推出各自的支持SQL的软件或者与SQL接口的软件,SQL很快被整个计算机界认可。1986年10月,美国国家标准局ANSI(American National Standard Institute)颁布了SQL的美国标准,该标准在1987年6月被国际标准化组织ISO(International Organization for Standardization)采纳为国际标准,它被称为SQL86。后经修订,ISO于1989年4月颁布增强了完整性特征的SQL89版本,随后ISO对SQL89标准进行了大量的修改和扩充,在1992年又公布了SQL92标准,也称为SQL2。从SQL89到SQL92,其内容在许多方面得到扩充。SQL标准化的工作还在继续,新的版本被命名为SQL3,已经发布,它在SQL2的基础上扩展了许多新的特性,如递归、触发器及对象等。

我国也制定了SQL的国家标准GBl2911,它等效于SQL89版本。

自SQL成为国际标准语言以后,各个数据库厂家纷纷推出各自的支持SQL的软件或与SQL接口的软件,这就有可能使大多数数据库均用SQL作为共同的数据库语言和标准接口,使不同数据库系统之间的相互操作有了共同的基础。而且对数据库以外的领域也产生了很大影响,有不少软件产品将SQL的数据查询功能与图形功能、软件工程工具、软件开发工具、人工智能程序结合起来。SQL已成为关系数据库领域中一个主流语言。

1.2.2 SQL的特点

SQL之所以能够为用户和业界所接受,成为国际标准,是因为它是一个综合、通用、功能极强同时又简洁易学的语言。SQL集数据查询、数据操纵、数据定义和数据控制功能于一体,充分体现了关系数据语言的特点和优点。其主要特点包括以下五种。

1.综合统一

数据库的主要功能是通过数据库支持的数据语言来实现的。

非关系模型(层次模型、网状模型)的数据库语言一般都分为模式数据定义语言(模式DDL)、外模式数据定义语言(外模式DDL或子模式DDL)、与数据存储有关的数据描述语言(DSDL)及数据操纵语言(DML),分别用于定义模式、外模式、内模式和进行数据的存取与处置。当用户数据库投入运行后,如果需要修改模式,必须停止现有数据库的运行,转储数据,修改模式并编译后再重装数据库,因此很麻烦。

而SQL集数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括关系模式的定义、数据的录入、建立数据库、查询和更新数据库及数据库的维护等一系列操作的要求,这就为数据库应用系统开发提供了良好的环境。例如,用户在数据库投入运行后,还可根据需要随时地、逐步地修改模式,并不影响数据库的运行,从而使系统具有良好的可扩展性。

另外,在关系模型中,实体和实体间的联系均用关系表示,这种数据结构的单一性带来了数据操作符的统一性,查找、插入、删除、更新等每一种操作都只需一种操作符,从而克服了非关系系统由于信息表示方式的多样性带来的操作复杂性。

2.高度非过程化

非关系数据模型的数据操纵语言是面向过程的语言,使用这样的语言进行数据操作,必须指定存取路径,而用SQL进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,因此用户无须了解存取路径,存取路径的选择及SQL的操作过程将由系统自动完成。这不但大大减轻了用户的负担,而且有利于增强数据的独立性。

3.面向集合的操作方式

非关系数据模型采用的是面向记录的操作方式,操作的对象都是特定的一条记录。例如,查询所有平均成绩在80分以上的学生姓名,用户必须说明完成该请求的具体处理过程,即如何用循环结构按照某条路径一个一个地把满足条件的学生记录读出来。而SQL语言采用集合操作方式,不仅查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合(每次为一个集合)。

4.以同一种语法结构提供两种使用方式

SQL有两种使用方式:一种是在终端交互方式下使用,称为交互式SQL;另一种是嵌入在高级语言的程序中使用,称为嵌入式SQL。交互式SQL是能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL的语句(命令)对数据库进行操作。作为嵌入式语言,SQL能够嵌入到高级语言(例如C、COBOL、FORTRAN、PL/1)程序中,程序员设计程序时,如果涉及到数据库数据的操作,可以在程序中插入SQL语句完成数据的操纵。同时,在两种不同的使用方式下,SQL语言的语法结构基本上是一致的。这种以统一的语法结构提供两种不同的使用方式的做法,为用户使用提供了极大的灵活性与方便性。

5.语言简洁、易学易用

SQL功能极强,但是由于设计巧妙,它的语言十分简洁,完成数据定义、数据操纵、数据控制这些核心功能只需9个动词即可完成,它们分别是CREATE、DROP、ALTER、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。而且由于SQL语法简单,接近英语句子,因此容易学习,可以很快上手。

1.2.3 SQL数据库的体系结构

SQL语言支持数据库三级模式结构,如图1.6所示。在SQL中有些术语与传统的关系数据库不同。在SQL中,概念模式称为“基本表”,内模式称为“存储文件”,外模式称为“视图”,元组称为表中的“行”,属性称为表中的“列(column)”。

一个SQL数据库是表的汇集。一个SQL表是由行元素组成的集合;一行是一个列的序列,其中每列对应一个数据项。

一个表可以是一个基本表,也可以是一个视图。基本表是实际存储在数据库中的表,而视图是由若干个基本表或其它视图构成的表,它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此,视图是一个虚表。在用户看来,视图和基本表是一样的,都是关系(二维表),系统对视图和基本表提供相同的操作语句。

一个基本表可以跨一个或多个存储文件,一个存储文件也可以存储一个或多个基本表。

图1.6 SQL数据库的体系结构

1.2.4 SQL的组成

● 数据操纵语言(DML,Data Manipulation Language)

用来操纵数据库中数据的命令,可分为数据查询和数据更新两类,如SELECT、INSERT、UPDATE、DELETE和CURSOR等。

● 数据定义语言(DDL,Data Definition Language)

用于定义SQL模式、基本表、视图、索引等结构,如CREATE TABLE和CREATE VIEW等。

● 数据控制语言(DCL,Data Control Language)

这一部分包括对表和视图的授权、完整性规则的描述等内容,如GRANT和REVOKE等。

● 其它语言要素(Additional Language Elements)

SQL语言还包括变量说明、事务控制、程序化SQL语句等。

SQL语句数据、种类较多,其主体大约由40条语句组成,如表1.1所示。

表1.1 主要的SQL语句

1.2.5 SQL语句的结构

所有的SQL语句都有自己的格式,每条SQL语句都由一个谓词开始,该谓词描述这条语句要产生的动作。谓词后面紧接着一个或多个子句,子句中给出了被谓词作用的数据或提供谓词动作的详细信息,每一条子句也都是由一个关键字开始。

例如:

SELECT 课程名称
   FROM 课程信息
   WHERE 课程编号=5

然后执行此查询语句,得到的结果与上图是一样的。

这就是查询视图语句其中,SELECT、FROM、WHERE为每一行的关键字,“课程名称”是要查找的字段名,“课程信息”是表的名称,“课程编号=5”是查找条件。