首页 > 代码库 > 4.1 SQL的本质

4.1 SQL的本质

对于早期的关系数据库,整个行业做了很多努力,试图统一不同的专用查询语言。IBM曾建立了一个早期的标准,被称为Structured English Query Language,这个名字缩写为SEQUEL。另外一种语言称为"选择查询语言(Select Query Language,SQL)",它包含了一些只能为制作报表和查找记录而读取数据的命令。当该语言成为流行的、与产品无关的标准时,数据库人士仍在坚持使用Sequel这个首字母缩写词。最终通过增加了一些命令,该数据库可以实现添加、删除、修改记录的操作。但这时出现了一个进退两难的局面:他们这么费劲地创建了一种标准语言,但这个可爱的名字却不合适了。最后Select被Structured所替代,于是,整个行业的争论趋向缓和。当然,正统人士坚持把SQL读作ESS CUE EL而不是SEQUEL。那么,究竟应怎么读这个词呢?怎么读都可以,不过我还是选择省略一个音节,读作SEQUEL(尽管你可能会不太同意这种读法)。为了让SQL语言不依赖于特定的产品或公司,SQL标准由独立的标准化组织发表并持有。SQL标准最初是由美国国家标准协会注册的,正式名称是ANSI SQL标准,发表于1986年。这个标准修订了多次,以下是这些修订版:

ANSI SQL-86

ANSI SQL-89

ANSI SQL-92

ANSI SQL:1999

ANSI SQL:2003

ANSI SQL:2006

虽然这个概念看起来简单,但还存在一些故事。实际上,此时的ANSI SQL标准不再由美国国家标准协会独家拥有了-美国土生土长的标准被全世界采纳的现象屡见不鲜。1987年,SQL成为国际标准,注册者是国际标准化组织(ISO),不过仍旧使用以往的版权名称,即ANSI SQL。这就意味着1992年修订版的SQL标准实际上被称为ISO ANSI SQL-92。尽管在1999年、2003年和2006年分别对此标准进行了修订,大多数基于SQL的数据库产品仍建立在ANSI SQL-92标准上,并没有被修改为完全符合ANSI SQL-99、2003或2006规范。如同其大多数竞争对手一样,T-SQL并不完全符合最近的ANSI标准,但是它实现了其中一些功能。

最后,ANSI SQL标准实际上定义了三个级别的兼容性:入门级、中级与完整级。大多数产品(包括SQL Server)完全符合入门级标准,部分符合更高的标准。

4.1  SQL的本质

许多使用T-SQL的人都有其他语言的使用经验。如果用户从来没接触过编程,请别把书合上就此放弃。有编程经验并不是编写SQL的先决条件,只不过对用过计算机系统其他语言的人来说,这种经验可作为参考。

把T-SQL与过程化或面向对象的编程语言(比如Java、C、C++、C#或者Visual Basic)相比较,就如比较苹果和石榴一样,两者没有更好或者更坏之分,即使在语法上或者某些语句的结构上的确存在相似性,但SQL和真正的编程语言相比还是有很大差异性的。对于不同的操作类型,T-SQL可能比这些语言先进得多,也可能差得多,因为它们所实现的目标不同。很难概括不同语言的功能,因为它们一直在演化,一个版本接着一个版本,添加越来越多的功能。而行业标准的问题就是,每个人都在保护并增强自己的产品。随着时间的推移,每项技术(这里是指编程语言)的功能开始重叠,提供了一大堆不同的选项来完成相同的任务。

那么是否可以不使用SQL,而使用过程化编程语言来完成数据访问或者数据操纵(在数据库中插入、修改或删除值)呢?回答是可以,但是这比较笨拙,通常也很低效。那么能否在T-SQL中实现复杂的数学运算、循环、字符串解析、多维数组管理呢?可以,不过这会耗费很多的时间和精力。第1章提到,SQL Server 2005允许程序员完全使用面向对象的程序代码(而不是SQL)编写存储过程与用户定义的函数,这不会让作为SQL Server本地语言的T-SQL在性能上有任何缺失,而只是给程序员提供了另一个选择。

T-SQL主要用于关系数据的操作,这没什么可惊奇的。T-SQL也有许多有用的功能来实现标量(单值)数据操作、逻辑运算、数学计算、决策结构、文本字符串解析以及循环机制。然而,和大多数编程语言相比,SQL不如真正的编程语言那样强大。如果需要超出SQL范围的高级功能,就要仔细考虑一下使用另一种方法,比如定制的扩展存储过程、应用程序编程接口(API)、.NET程序集或者其他编程解决方案。所以SQL Server的集成服务既可以使用编程代码也可以使用T-SQL。在解决了这个问题之后,现在您应该知道T-SQL可以做什么了吧?真是非常多。那么又应使用T-SQL执行什么操作?这是一个更好的问题。希望读者在看完了本章后能找出答案。

T-SQL是与SQL Server交流的语言,而查询表达式主要用来告诉服务器该做什么。一定要知道可以要求SQL Server做什么和SQL Server能做什么。查询操作可分为三类,下面简要描述它们,然后讲解几个例子。和技术世界里的所有事物一样,这些类别用三字母缩写词(Three-letter abbreviations,TLA)表示,按顺序介绍如下:

数据定义语言(Data Definition Language,DDL):用于创建、管理数据库中的对象。DLL语句可以创建、修改、删除数据库、表、索引、视图、存储过程和其他对象。例如CREATE/ALTER和DROP。

数据控制语言(Data Control Language,DCL):DCL语句用于控制用户和数据库对象的安全权限。一些对象有不同的权限集。可以给特定的用户或者用户组授予或者拒绝这些权限。这些用户或者用户组属于一个数据库角色或者Windows用户组(如GRANT、REVOKE和DENY)。

数据操纵语言(Data Manipulation Language,DML):DML语句用于处理数据,包括数据检索、在表中插入行、修改值、删除行等。例如SELECT、INSERT、UPDATE和DELETE。

【责任编辑:云霞 TEL:(010)68476606】

4.1 SQL的本质