前 言结构化查询语言(Structured Query Language)简称SQL,是与大多数数据库系统通信的标准语言。如果你正在阅读本书并希望从数据库系统中获取信息,那么就需要使用SQL。
本书面向从事SQL工作的开发人员和初级数据库管理员(DBA),适合对SQL的基本语法比较熟悉并且希望再获得一些有用的技巧以便更高效地使用SQL语言的人。而且我们发现,当从计算机编程惯用的基于过程的方式转变为基于集合的方式来解决问题时,所需的思维方式是截然不同的。
关系数据库管理系统(RDBMS)是一种软件应用程序,用于创建、维护、修改和操作关系数据库。许多关系数据库系统也提供了用于操作数据库中数据的客户端工具。关系数据库系统自出现以来一直在不断发展,并随着硬件技术和操作系统环境的进步变得更加完善和强大。
SQL简史IBM研究员Edgar F. Codd博士(1923—2003)在1969年首次提出了关系数据库模型。他在20世纪60年代后期研究了处理大量数据的新方法,并开始思考如何应用数学原理解决遇到的各种问题。
自1970年Codd博士向世界提出了关系数据库模型之后,许多组织(如大学和研究实验室)开始致力于开发一种语言,用作支持关系数据库的基础。20世纪70年代中期几种不同的语言出现,其中一个正是来自位于加利福尼亚州圣何塞的IBM圣特雷莎研究实验室的努力。
20世纪70年代初,IBM启动了一个名为System/R的重大科研项目,旨在证明关系模型的可行性,并希望在设计和实现关系数据库方面获得一些经验。1974~1975年,他们的初次实验获得成功,创建了一个关系数据库的迷你原型。
在开发关系数据库的同时,研究人员也在努力定义数据库语言。1974年,Donald Chamberlin博士和他的同事发明了结构化英语查询语言(Structured English Query Language,SEQUEL),这门语言允许用户使用清晰易懂的英语句子操作关系数据库。原型数据库SEQUEL-XRM的初步成功,激励着Chamberlin和他的同事,他们决定继续研究。1976~1977年,他们把语言名称从SEQUEL修改为SEQUEL/2,但是不巧,SEQUEL缩写已经被别人使用了,出于法律原因,他们不得不将SEQUEL更名为SQL(结构化查询语言或SQL查询语言)。时至今日,虽然大家已经广泛接受了官方发音“ess-cue-el”,但是许多人还是将SQL读作“sequel”。
虽然IBM的System/R项目与SQL语言证明关系数据库是可行的,但是由于当时的硬件技术水平太低,这款产品并没有商用。
1977年,加利福尼亚州门罗公园的一群工程师创办了Relational Software公司,他们开发了一套基于SQL的关系数据库产品并命名为Oracle。1979年,Relational Software公司发布了这款产品,使之成为第一个商业化的关系数据库产品。Oracle的一大优势是能运行在Digital的VAX小型机上,而不是昂贵的IBM大型机。Relational Software公司此后更名为Oracle公司,成为RDBMS软件领域领先的厂商之一。
大约在同一时间,来自加利福尼亚大学伯克利分校计算机实验室的Michael Stonebraker、Eugene Wong和其他几位教授也在研究关系数据库技术。他们也开发了一个关系数据库的原型,命名为Ingres。Ingres使用一种称为查询语言(QUEL)的数据库语言,它比SQL结构更为清晰,而且使用了更少的类似英语的词句。但是,很明显当时SQL正在慢慢变成数据库标准语言,所以Ingres最终改为基于SQL的关系数据库。1980年,这几位教授离开伯克利,成立了Relational Technology公司。1981年,他们发布了Ingres的第一个商业版本。Relational Technology公司之后经历了几次变革。Ingres之前为Computer Associates International公司所有,现在属于Actian公司,但不管怎么样,Ingres仍然是行业数一数二的数据库产品。
1981年,IBM也宣布开发自己的关系数据库,名为SQL/DataSys(SQL / DS),并于1982年发布。1983年,IBM公司推出了一种名为Database 2(DB2)的新型关系数据库产品,它可以在安装IBM的主流MVS操作系统的IBM大型机上运行。1985年第一次发布之后,DB2就成为IBM首屈一指的关系数据库,其技术已经融入IBM整个产品线中。
随着数据库语言的不断发展,语言标准化的想法在数据库社区中呼声渐长。但是,由谁来制定标准,或者应该参照哪个方言来制定一直没有达成共识,所以每个开发商还在不断开发与改进他们自己的数据库产品,并希望有朝一日自己的数据库方言能够成为行业标准。
许多开发商都会根据用户的反馈和需求在自己的数据库方言中增加新的元素,从而形成了早期非正规的标准。相对现在的标准来说它只能算是很小的一部分,因为它只包含各种SQL方言中相似的部分。然而,正是这一小部分规范(尽管不是很完善)为数据库用户提供了一套权威的评判标准,通过这些标准可以判断市场上的各种数据库,并且用户可以在不同数据库间切换。
1982年,为了满足关系数据库语言标准化日益增长的需求,美国国家标准协会(ANSI)委托旗下X3组织数据库技术委员会X3H2制定一个标准。一番周折之后(包括对SQL的大量改进),委员会才意识到新的标准与市面上主要的SQL方言不兼容,对SQL的修改也并没有带来显著提