赞
踩
SQL是Structured Query Language的缩写,它的前身是著名的关系数据库原型系统System R所采用的SEQUEL语言。作为一种访问关系型数据库的标准语言,SQL自问世以来得到了广泛的应用,不仅是著名的大型商用数据库产品Oracle、DB2、Sybase、SQL Server支持它,很多开源的数据库产品如PostgreSQL、MySQL也支持它,甚至一些小型的产品如Access也支持SQL。近些年蓬勃发展的NoSQL系统最初是宣称不再需要SQL的,后来也不得不修正为Not Only SQL,来拥抱SQL。
蓝色巨人IBM对关系数据库以及SQL语言的形成和规范化产生了重大的影响,第一个版本的SQL标准SQL86就是基于System R的手册而来的。可惜IBM起先并没有什么产品化的想法,倒是Oracle在1979年率先推出了支持SQL的商用产品。随着数据库技术和应用的发展,为各种不同的关系数据库系统提供一致的语言成了一种现实需要。
对SQL标准影响最大的机构自然是那些著名的数据库产商,而具体的制订者则是一些非营利机构,例如国际标准化组织ISO、美国国家标准委员会ANSI等。各国通常会按照 ISO标准和ANSI标准(这两个机构的很多标准是差不多等同的)制定自己的国家标准。中国是ISO标准委员会的成员国,也经常翻译一些国际标准对应的中文版。标准为了避免采用具体产品的术语,往往会抽象出很多名词,从而增加了阅读和理解的难度,翻译成中文之后更容易词不达意。对于数据库系统实现者和用户而言,很多时候还不如直接读英文版本为好。虽然正式的标准不像RFC那样可以从网络上免费获得,标准草案还是比较容易找到的(例如:http://www.jtc1sc32.org/doc/)。待批准的标准草案和最终的标准也没有什么实质上的区别,能够满足日常工作的需要。
下面是SQL发展的简要历史:
- 1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86
- 1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-89
- 1992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2)
- 1999年,ISO/IEC 9075:1999,SQL:1999(SQL3)
- 2003年,ISO/IEC 9075:2003,SQL:2003
- 2008年,ISO/IEC 9075:2008,SQL:2008
- 2011年,ISO/IEC 9075:2011,SQL:2011
- 2016年,ISO/IEC 9075:2016,SQL:2016
细心的读者能发现,从SQL:1999开始,标准简称中的短横线(-)被换成了冒号(:),而且标准制定的年份也改用四位数字了。前一个修改的原因是ISO标准习惯上采用冒号,ANSI标准则一直采用短横线。后一个修改的原因是标准的命名也遇到了2000年问题。
SQL86大概只有几十页,SQL92正文大约有500页,而SQL99则超过了1000页。可以看出,从SQL99开始,SQL标准的个头就非常庞大了,内容包罗万象,已经没有人能够掌握标准的所有内容了。
2016年12月14日,ISO/IEC发布了最新版本的数据库语言SQL标准(ISO/IEC 9075:2016)。从此,它替代了之前的ISO/IEC 9075:2011版本。
最新的标准分为9个部分:
ISO/IEC 9075-1 信息技术 – 数据库语言 – SQL – 第1部分:框架(SQL/框架)
ISO/IEC 9075-2 信息技术 – 数据库语言 – SQL – 第2部分:基本原则(SQL/基本原则)
ISO/IEC 9075-3 信息技术 – 数据库语言 – SQL – 第3部分:调用级接口(SQL/CLI)
ISO/IEC 9075-4 信息技术 – 数据库语言 – SQL – 第4部分:持久存储模块(SQL/PSM)
ISO/IEC 9075-9 信息技术 – 数据库语言 – SQL – 第9部分:外部数据管理(SQL/MED)
ISO/IEC 9075-10 信息技术 – 数据库语言 – SQL – 第10部分:对象语言绑定(SQL/OLB)
ISO/IEC 9075-11 信息技术 – 数据库语言 – SQL – 第11部分:信息与定义概要(SQL/Schemata)
ISO/IEC 9075-13 信息技术 – 数据库语言 – SQL – 第13部分:使用Java编程语言的SQL程序与类型(SQL/JRT)
ISO/IEC 9075-14 信息技术 – 数据库语言 – SQL – 第14部分:XML相关规范(SQL/XML)
SQL:2016中主要的新特性包括:
行模式识别(row pattern recognition)使用MATCH_RECOGNIZE子句指定一个匹配多行的模式(正则表达式),可以对这些匹配的行组进行过滤、分组和聚合操作。MATCH_RECOGNIZE支持两种形式:ONE ROW PER MATCH和ALL ROWS PER MATCH。ONE ROW PER MATCH对于每次匹配返回单行摘要,而ALL ROWS PER MATCH对于每次匹配中的每一行数据返回一行输出。行模式匹配可以用于分析时间序列数据,例如股票行情收录器日志或事件日志。
支持JSON对象
JSON对象由标签和数据组成。它为一些应用提供了极大的灵活性。SQL:2016提供了以下功能:
多态表函数
表函数是指返回结果为一个表的函数,多态表函数(Polymorphic Table Functions, PTF)是一种用户定义的函数,可以在FROM子句中使用。它们可以处理在定义时没有声明行的类型的表,也可以生成一个在定义时声明了或者没有声明行的类型的结果表。多态表函数允许开发人员利用动态SQL创建强大而复杂的自定义函数。
额外的分析功能
SQL:2016增加了额外的分析功能,包括三角函数和对数函数。增加的三角函数包括sin、cos、tan、sinh、cosh、tanh、asin、acos以及atan。对数函数包括一般对数函数(log(<base>, <value>))、常用对数函数(log10(<value>))和自然对数函数(ln(<value>))。
这些分析函数支持在已有的SQL应用中进行复制的计算,同时可以为以后的多维数组提供支持。
负责具体制定工作的是ISO和IEC联合成立的一个技术委员会JTC1/SC32。正因为关系数据库市场非常成熟,竞争不够激烈,标准本身变得过于庞大等原因,SQL3制定的周期很长,制定期间也存在很多争议。例如文章《Is SQL a Real Standard Anymore?》对SQL标准化进程提出了置疑。
如果要了解标准的内容,比较推荐的方法是泛读SQL92(因为它涉及了SQL最基础和最核心的一些内容),然后增量式的阅读其他标准。标准在每次更新的时候,委员会的成员们都为大家提供比较好的介绍文档。例如针对最新的SQL:2011,SIGMODRecord上就有很不错的介绍:http://www.sigmod.org/publications/sigmod-record/1203/pdfs/10.industry.zemke.pdf
最后再简要介绍一下SQL标准的符合程度。绝大多数人提起SQL标准,涉及的内容其实是SQL92里头最基本或者说最核心的一部分。SQL92本身是分级的,包括入门级、过度级、中间级和完全级。为了验证具体的产品对标准的遵从程度,NIST还曾经专门发起了一个项目,来做标准符合程度的测试集合:http://itl.nist.gov/p897/ctg/sql_form.htm。不过,SQL标准包含的内容实在太多了,而且有很多特性对新的SQL产品而言也越来越不重要了。从SQL99之后,标准中符合程度的定义就不再分级,而是改成了核心兼容性和特性兼容性;也没有机构来推出权威的SQL标准符合程度的测试认证了。
以下附上SQL脑图:
参考:
https://www.2cto.com/database/201412/360265.html?seluta=oyebw2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。