结构化查询语言(SQL)自20世纪70年代以来,一直与信息科技齐头并进,因此,在商业界与产业界中,它是最广泛使用的数据库操纵语言。许多软件公司与程序开发者(包括开放源码推动者,http://www.opensource.org)均各自开发了自己的SQL方言(dialect),以便适应特定的专业需求。同时,标准版还开发了越来越多的通用功能。.
《SQL技术手册(第三版)》描述了每条SQL命令的最新ANSI标准:SQL2003(SQL3),收录了这些命令在各种平台上的实现方式。本书包括关系数据库管理系统(relational database management system,RDBMS)模型的简洁说明、基础RDBMS概念的明确解释及详尽的SQL语法和命令。
最为重要的是,无论你是程序员还是开发者,《SQL技术手册(第三版)》提供了市场上最受欢迎的商用数据库软件包(Microsoft SQL Server与Oracle)的简明指南。本书还是两种最广为人知的开放源码数据库产品(MySQL与PostgreSQL)的简明指南。本书对开放源码SQL平台的重视呼应了开放源码运动在计算机界日趋重要的形势。
本书讲述的SQL语法包括:
ANSI SQL2003(也称为SQL3)标准语法;
MySQL 5.1版;
Oracle Database 11g;
PostgreSQL 8.2.1版;
Microsoft SQL Server 2008。
本书特色
有关关系数据库的主要信息来源是厂商提供的说明文档及帮助文件。尽管每家厂商的帮助文件是大多数数据库程序员及数据库管理员优先参考的必备资源,但这类文件有如下限制。
只讲述了数据库厂商的SQL实现,而SQL实现如何满足SQL的ANSI 标准,它并没有为你指定任何上下文(context )。
只讲述了单一、特定数据库厂商的产品。并未涵盖转译(translation)、迁移(migration)或集成(integration)的议题。
通常用许多片段式小说明文档或帮助文件来解释程序设计方法。
对于个别命令的描述通常拘泥于细节,进而模糊了程序员与管理员平时使用命令的简洁方式。
换句话说,厂商数据库的说明文档,对特定的数据库厂商平台的各方面均提供了详尽的说明。这是很自然的,毕竟,帮助性文字本来只是锁定产品的主要内容。这些帮助性文字告诉你命令的特定语法(及其所有模糊的变化版本),以及大体上如何实现它。如果经常更换关系数据库管理系统(relational database management system, RDBMS),并须要很快入门时,你将很少用到那些模糊的命令变形,而须使用一般情形下的一般功能。
本书从专业数据库管理员与开发者身上汲取经验(他们每天使用这些SQL变化版本以支持复杂的企业应用程序),从数据库厂商说明文档未能涵盖的部分延续说明。本书以精简易用的形式帮助读者吸收他们的宝贵经验。无论你是SQL新手还是从早期就开始使用SQL的老手,都可以从中学到新秘诀和新技巧。另外,当你更换不同的系统时,一定要注意在不小心或不熟悉的情况下容易出错的问题。
本书目标读者
《SQL技术手册(第三版)》对多种类型的读者均有帮助:包括需要简便的SQL参考工具的程序员、需要迁移SQL方言的程序开发者及数据库管理员(database administrator,DBA)——他们要执行众多SQL语句令企业数据库持续地运行,且要创建并管理数据表、索引和视图对象等。
本书是一本参考手册,而非学习指南。因此没有用解说的方式撰写。例如,本书并没有解释基本的循环概念。有经验的程序员早已了解这些概念,他们要了解的是程序的精髓。因此,本书会解释ANSI标准光标(cursor)的详细功能,它在本书收录的数据库平台上是如何运行的、在各个数据库平台上光标的特殊功能、光标的多种陷阱及如何避免这些陷阱。
.尽管本书并不打算把《SQL技术手册(第三版)》作为SQL的学习指南或数据库设计手册,但是依然简短地讲述了这些介绍性议题,希望能对读者有所帮助。第1章与第2章是SQL简介,涵盖了SQL语言的大致起源、重要结构及基本操作。如果你是SQL新手,这些章节将帮助你入门。
本书结构
《SQL技术手册(第三版)》共4章及一个附录。
第1章 SQL历史与实现
讨论关系数据库模型,说明目前及在此之前的SQL标准,并介绍本书收录的SQL实现。
第2章 基本概念
涵盖了了解关系数据库及SQL命令所需的基本概念。
第3章 SQL语句命令参考
依照字母顺序列出SQL语句的命令。详细说明了每条命令的最新ANSI标准(SQL3),以及每条命令用MySQL、Oracle、PostgreSQL与SQL Server实现的方式。
第4章 SQL 函数
依照字母顺序列出ANSI SQL3 函数,说明所有SQL3函数的数据库厂商实现。另外,本章也包含了各个平台独有函数的实现。
附录 平台共有与独有的关键字
按不同数据库平台列出SQL3公布的关键字表。读者可以在此表中查询不应该在对象或变量名中使用的词汇。
本书使用指南
《SQL技术手册(第三版)》主要是一本命令参考手册。因此,读者可以用它来查询多种SQL命令与函数。但是,由于ANSI标准,再加上四种数据库平台均有自己的说明文档文件,因此各条命令的说明很可能会变得相当繁琐。
为了避免每条命令的说明过于冗长,本书选择比较每种平台的SQL3标准实现。对平台支持SQL3中提及的子句,将不再重复说明。
每条SQL3命令的说明中都会列举通用及可互用的示例。由于SQL3标准优先于大部分数据库平台,因此本书所讨论的平台中不支持SQL3的命令,在此便不举例说明了。另外,对于各数据库平台的扩充及高级功能,本书提供了更多的示例说明。
我们知道,本书可能要求读者由某种平台的命令实现跳回翻阅对应的SQL3命令说明。但是,我们觉得此种方式会比在书内放入数百页的重复内容要好得多。
资源
以下网址提供本书收录的不同平台的附加信息。
MySQL
MySQL的企业资源网址是http://www.mysql.com,另外一个不错的网站是http://dev.mysql. com/doc/refman/5.1/en/。Devshed.com是很棒的程序开发者资源,上面有很多有用的秘诀。有关MySQL特有的信息,请参见http://www.devshed.com/c/b/ MySQL/。
PostgreSQL
此开放源码数据库的主页位于http://www.postgresql.org。上面除了有丰富的信息可供下载以外,还有PostgreSQL用户的邮件列表。另外一个值得探索的PostgreSQL网站是http://www.pgsql.com,它为商务客户提供相关支持。
Oracle
Oracle的网络空间是http://www.oracle.com。Oracle忠实用户的绝佳资源是http://www.oracle. com/technology/。在http://www.oracle.com/technology/documentation/index.html上,也可以找到所有的Oracle文档。关于Oracle的宝贵独立信息,请访问位于http://www.ioug.org上的独立Oracle用户组(Independent Oracle User Group,IOUG)。
SQL Server
Microsoft SQL Server的官方网站是http://www.microsoft.com/sql/。另外一个不错的资源来源是SQL Server专业协会(Professional Association for SQL Server,PASS)的主页http://www. sqlpass.org。
第三版的更新
对技术书籍的新版作出修订的一个重大原因是,技术(一直)在进步。虽然已经出版了本书第二版,但ANSI标准又公布了一个新版本,它所收录的所有数据库平台至少已发布了一个主要的版本。因此,读者希望了解当前市场上SQL最新版的新内容。
下面是本书第三版中更新的一些细节。
缩减范围..
《SQL技术手册(第二版)》的读者群喜欢它的所有主要的数据库平台延伸内容。然而,从投资回报率着眼,你很难维护如此大量的内容。因此,在对大量读者调查的基础上,我们决定从该版本中删除至少两种流行的数据库平台:Sybase Adaptive Server与IBM的DB2 UDB。
改进组织结构
本书第二版向读者展示了他们想了解的在SQL中可用的全部命令和函数,以及主要的数据库平台,但这并不表示其内容总是易于查询或导航。我们添加了更好的索引、内容表格,以及页标题(page header)与页脚(page footer),因此,读者可以较快速、高效地导航到你所需要的内容。
更多示例
示例永远都不会嫌多。本书向原有的众多基本示例中添加了说明示例,其中包括一些范例代码(它们强调各数据库平台独有的及强大的SQL标准功能与扩展功能)。
本书约定
本书使用如下排版约定。
等宽字体(Constant width)
用于指示程序示例中的编程语法、代码片段及示例。
等宽斜体(Constant width italic)
用于指示程序代码中应以用户提供的值替换的变量。
等宽粗体(Constant width bold)
用于强调程序代码中的某一部分代码。
斜体(Italic)
用于介绍新术语、强调、指示命令,或者用户指定的文件与目录名称及文中的变量。
粗体(Bold)
用于显示数据库对象的名称,例如表(table)、列(column)及存储过程(stored procedure)。
大写粗体(UPPERCASE ITALIC)
用于指示文中出现的SQL关键字。
此图标表示一则技巧、提示或普通的注解。
此图标表示一则警告或注意。
使用示例代码
在这里,本书可以更好地帮助你完成工作。总的来说,你无须获得授权就可以在你的程序和文档中使用本书的代码。除非你对代码中最重要的部分进行了二次加工,否则无须联系我们获得授权。例如,使用本书的代码片段编写程序,并不需要特别的许可。但是,销售或分发包含本书示例代码的光盘则必须获得许可。引用本书的问题解答或示例代码并不需要授权。然而,如果要将本书示例中的核心代码放入你的产品文档中,则要获得许可。
我们重视图书的版权要求,然而并非必需。图书版权通常包括标题、作者、出版商及ISBN。例如:“SQL in a Nutshell, Third Edition, by Kevin E. Kline with Daniel Kline and Brand Hunt. Copyright 2009 O’Reilly Media, Inc., 978-0-596-51884-4”。
如果你在使用示例代码过程中发现了错误,或者希望获得上述授权,敬请联系我们:permissions@oreilly.com。
联系我们
我们已尽力核验本书所提供的信息,尽管如此,仍不能保证本书完全没有瑕疵,而网络世界的变化之快,也使得本书永不过时的保证成为不可能。如果读者发现本书内容上的错误,不管是赘字、错字、语意不清,甚至是技术错误,我们都竭诚虚心接受读者指教。如果您有任何问题,请按照以下的联系方式与我们联系。
奥莱理软件(北京)有限公司
北京市 西城区 西直门 南大街2号 成铭大厦C座807室
邮政编码:100080
网页:http://www.oreilly.com.cn
E-mail:info@mail.oreilly.com.cn
O’Reilly & Associates, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(800) 998-9938 (in the United States or Canada)
(707) 829-0515 (international/local)
(707) 829-0104 (fax)
与本书有关的在线信息如下所示。
http://www.oreilly.com/catalog/9780596518844(原书)
http://www.oreilly.com.cn/book.php?bn=978-7-121-08775-2(中文版)
北京博文视点资讯有限公司(武汉分部)
湖北省 武汉市 洪山区 吴家湾 邮科院路特1号 湖北信息产业科技大厦1402室
邮政编码:430074
电话: (027)87690813 传真:(027)87690813转817
读者服务网页:http://bv.csdn.net
E-mail:
reader@broadview.com.cn(读者信箱)
bvtougao@gmail.com(投稿信箱)
致谢
我们想在此感谢O’Reilly出版社的几位特别功臣。首先,我们最感谢的是本书第三版的编辑Julie Steele。Julie在困难重重的出版过程中追踪内容及进度,确保了我们完成本书。Julie工作起来轻松自如,在工作中她总是乐于助人。谢谢你为我们所作的一切!
我们也很感谢优秀的技术校对人士:Peter Gulutzan(SQL Standard,来自第二版)、Thomas Lockhart (PostgreSQL)、Ronald Bradford(Oracle/MySQL)及Richard Sonnen(Oracle),我们由衷地谢谢诸位的帮忙!由于诸位的协助,极大提升了本书的精确性、可读性及价值。如果没有你们,各种语言扩充功能的章节可能无法那么扎实。此外,我们要向Peter Gulutzan及Trudy Pelzer编著的《SQL-99 Complete, Really》(R&D)一书致敬,这本书帮助我们理解了ANSI SQL3标准。
Kevin E. Kline的致谢词
许多人帮忙才得以完成你手中这本既大又厚的书。我们想在此对协助本书出版的人表达谢意。
首先,要大力表扬Dan和Brand,两位令人敬畏的本书的合著者。与你们一起合作真正令我感到欣慰和安心。接着要衷心感谢O’Reilly出版社的编辑Julie Steele,谢谢你对我们的大力支持。你自始至终都在督促我们写作和交稿。真的感激不尽!
还要感谢我在Quest Software的同事,感谢你们给予我的支持及鼓励:Christian Hasker、Andy Grant、Heather Eichman、David Gugick、Billy Bosworth、Douglas Chrystall、David Swanson、Jason Hall、Ariel Weil,以及我在Quest Software的其他朋友。谢谢你们最近6年中在Quest Software所做出的巨大贡献。
我想感谢我的家人:Dylan、Emily、Anna与Katie。当世界上没有希望、呼吸或灯光时,你们便是我的希望、呼吸与灯光。谢谢你们给予我如此完整及无私的爱。最后,要感谢的是Rachel,你比珠宝还宝贵,比红宝石更有价值,你的爱充实了我的心和信仰。
Daniel Kline的致谢词
我想在此感谢我的兄长Kevin,感谢他不断给我支持。感谢阿拉斯加安克雷奇大学(University of Alaska Anchorage)的同事给予我的建议,也感谢《SQL技术手册》前两版读者的诚恳反馈及有用的批评。我还要感谢《SQL技术手册》前两版各位译者的一些极好的反馈,谢谢他们对本书提供的帮助。
Brand Hunt的致谢词
首先感谢我的妻子Michelle,如果不是她持续地支持与关怀,我也不会参与到这个项目中来。我十分珍惜共享的每一时刻,感谢她包容我深夜打字所发出的干扰声。
还要感谢我的父母Rex和Jackie,我能有今天的任何成就,尤其是需要多次尝试才能成功的事。(如写作!)都要归功于他们对我最为深远的影响。
我也要深深感谢我的同事Kevin、Daniel及Jonathan让我参与这个项目,感谢他们发挥极大的耐心来教导我这位O’Reilly的新手。他们的专业精神、工作态度及让大部分繁琐工作变得有趣的能力令人钦佩不已,我也下定决心,大丈夫当如此耳!
感谢以下来自Rogue Wave Software、ProWorks、NewCode Technology及Systems Research and Development的朋友和同事,他们大力支持我精心研究SQL、数据库、商业、软件开发及写作方面的技巧,还给了我深厚的友谊,他们是:Gus Waters、Greg Koerper、Marc Manley、Wendi Minne、Erin Foley、Elaine Cull、Randall Robinson、Dave Ritter、Edin Zulic、David Noor、Jim Shur、Chris Mosbrucker、Dan Robin、Mike Faux、Jason Prothero、Tim Romanowski、Andy Mosbrucker、Jeff Jonas、Jeff Butcher、Charlie Barbour、Steve Dunham、Brian Macy及Ze’ev Mehler。...