想精通SQL Server, T-SQL的全历史你听过吗?

2019-12-26 12:19:02 浏览数 (1)

01, SQL 的渊源

人类开始思考,上帝开始发笑。

早在20世纪70年代,两位年轻人Ray Boyce 和 Donald D. Chamberlin,成功将上帝语言(关系数学)编译为凡人的工具。

上帝语言是这样的:

而凡人的工具长这样:

没错,这就是SQL.

更多的历史,可以参考我的两篇原创文章:

深扒SQL的历史,说点秘密给你听

SQL 已死,NoSQL才是王道?醒醒吧,别瞎说八道了

这位70后语言大叔,历经40余载的风风雨雨,送走古往今来多少挑战者,其中不乏几乎颠覆整个数据库界的 NoSQL 王者,比如 MongoDB, ElasticSearch, HBase, Hive, 但迄今依然是首座,亦有大幅收复丢失战地的气魄。

02, ISO 与 ANSI

俗话说,没有标准,就没有方圆。

在 SQL 行业,有两个标准,作为基本常识,不可不知,那就是 ISO 与 ANSI.

ISO: International Organization for Standardization. 我们常称之为国际标准组织。

这家总部设在瑞士日内瓦的组织,就干了一件事:把164个国家的标准采纳到自己的标准清单上,坐收全世界的认证费,是不是够牛皮?所以说,人生只要干好一件事就足矣!

那么全世界的企业都傻了么,为什么要费钱拿个 ISO 认证?其实这是一套玩法,在这个圈子里玩,就要遵守规矩,尤其是信任规矩。如果没有坐下来好好谈,把规矩形成大家的共识,那么背叛和出卖也就难免了。

就拿5G来说,如果没有个标准通信信道,华为的5G跑到人家欧洲市场,就不灵了。因为华为的5G通信信道标准是 Polar, 但欧洲人采用的是 Colar, 那妥妥的欧洲人的钱就挣不到了嘛。

回到 SQL 上来,大家都知道关系代数和关系计算是 SQL 的基础,那如果不用 SELECT 标明是选择, 用 INSERT 标明是插入,那么可以想象,几个地区的查询语句就好玩了:

代码语言:javascript复制
Retrieve * At TblUsers;

Grab * In TblUsers;

其实大家都说的是同一个事儿:

代码语言:javascript复制
Select * From TblUsers;

所以还是得感谢 ISO 组织,要不然我们得学多少门 SQL 方言。

作为一家盈利公司,只要你能符合 ISO SQL 的标准,无论你的数据库底层怎么实现,用什么操作系统,用什么编程语言,只能 CRUD 都遵循了 ISO 标准,就可以推向全世界。

刚才提到,ISO 是国际标准组织,由164个国家的标准化组织联盟组成。其中就有 ANSI, 而 ANSI 就是首次提出 SQL 作为 ISO 标准的美国国家标准研究院(American National Standard Institute).

这步操作,全美国都要感谢 ANSI,如果不是 ANSI 这么及时的给 SQL 按上一个名分,三大数据库软件 Oracle, DB2, SQL Server 就只能在美国玩了。

ANSI 在 1986 年提出第一版 SQL 标准,简称 ANSI X3.135-1986 . 实际上, ANSI 与 ISO 一样是个组织,自己本身并不开发任何标准,都是由认证成员自己提出标准,组织批准和认证。本质上来说, ANSI X3.135-1986 并不是 ANSI 自己提出的,而是 ANSI 认证的组织,叫做 Accredited Standards Committee (ASC) X3,就是现在的 INCITS,向 ANSI 提交的。ANSI X3.135-1986 一炮而红之后, ISO 在 1987 年也就提出了 ISO 9075-1987 标准。从此 SQL 标准登录了世界舞台。

如果说 ANSI X3.135-1986 催生了 ISO 9075-1987 ,那么之后 ANSI 就顺延了 ISO 的各种标准,ISO 有啥新标准,ANSI 就执行新标准。比如随后的 SQL 新版本有 SQL89, SQL 92, SQL93, SQL2003, SQL2008, SQL2011,SQL2013, SQL2016, ANSI 也跟上了这些标准。

看到上面的故事,是不是已经窒息了,这么枯燥,我都看不下去。让我举个更简单的例子:比如我们费尽要考取的清华大学。

考入清华,是每个人的理想。但现实是这只能成为大部分人的梦想。因为标准高啊。而一旦考入清华,再出来找工作,是不是简单很多?HR 一听清华出来的,眼睛都绿了。这就是清华认证的魅力。

当有一天,你经过千山万水的努力,让自己在德智体美劳全面开花了,终于进入清华了,发现这特么太简单了,我要加大难度,于是把分数线提高了30分。你看,这就是改标准。于是,又有学弟学妹千山万水的冲突了你的标准,进来了。这些学霸一看,这谁定的分数线,太简单,于是又拉高了30分。成了标准清华标准3.0. 如此循环,生生不息。

你看,这就是标准组织与成员之间的互相促进。强者恒强!

03, T-SQL 的过去

  • SQL 99 (included some OLAP concepts, Boolean data types, role-based access)
  • SQL 2003 (included some XML features, windows functions, more OLAP features, and other features)
  • SQL 2006 (includes more features related to Storing XML, XQuery, etc.)
  • SQL 2008 (includes definitions for TRUNCATE statements, FETCH Clauses, INSTEAD OF)
  • SQL 2011 (includes revisions for temporal data, some additional definitions for Windows Functions and also the FETCH clause
  • SQL 2016 includes features related to JSON data, polymorphic table functions, and row pattern matching
  • SQL 2019 is related to the multidimensional arrays

很多前端开发朋友都会问我,为什么 SQL Server 不支持 Json 啊,这么弱鸡。我也只能笑笑,其实 SQL 也是受版本控制的,如果你也受到类似问题的困惑,大概上面的清单就可以帮助你。

T-SQL, Transaction-SQL,最先用于 Sybase, 之后 Sybase 移交给了 MS SQL Server, 自然 T-SQL 也是 SQL Server 的专属语言了。

如果想要看 IBM 与 Microsoft 之间的恩怨,还有 Sybase 与 SQL Server 之间的蜜月,可以看这篇 《深扒SQL的历史,说点秘密给你听》,保证你大呼小叫。

在我看来,SQL Server 的更新版本是很快的,我从 SQL Server 2000开始用起来,慢慢熟悉了 T-SQL, Dts, Reporting. 当我主导完第一个 Cube 项目,收到集团公司的好评开始,我就断定了,SQL Server 完全具备提供全套信息服务工具的能力。当 SQL Server 2005 出来时,我毫不犹豫的就在公司的下一个 OLAP 中使用上了,SSIS/SSAS/SSRS 简直就是福星。

抛去这些数据库本身的特性带来的震撼之外,T-SQL本身也在紧跟 SQL 标准发展。当我开始在项目中使用,OffSET ... Rows Fetch Only...Rows, 身边的朋友们还在放肆的大笑,这么风骚的代码,也只有你黄师傅才敢写。分页不就是 RowNumber 嘛,搞那么复杂。

哈哈,ISO SQL2011 标准早就有了,现在才用,是这些人太不懂SQL!

如果你们跟上了SQL的步伐,果断采用新特性,我支持。并且有空就要给你们的朋友普及,虽然换来的可能是质疑的声音,但不用多久,你就会得到他们的正面反馈“我X,你发我的新语法,管用,省事儿!” 这一切,都是值得的。

End

0 人点赞