第123期 | 为什么说 SQL 是最成功的第四代语言?
池建强
讲述:池建强大小:7.26M时长:07:56
你好,这里是卖桃者说,今天和你闲话一下 SQL 这门语言。
首先我们来说一下编程语言的划分,一般来说,第一代编程语言就是机器语言,0101001,将二进制数据刻录到存储上,就算编程了。第二代是汇编语言,汇编语言非常接近计算机指令,一条汇编命令基本上和 CPU 指令一一对应。第三代就是所谓的高级语言,面向过程和对象的编程语言,比如 C、Java、Python 等等。
第四代语言的定义其实很模糊,大意是你只需要告诉计算机做什么,而不需要告知计算机怎么做。看起来是不是很智能啊,所以很多技术被归拢到 4GL 里,比如查询语言和报表生成器、图形语言、应用生成器等等。其中 SQL 算是 4GL 的代表,因为 SQL 就是用类英语的自然语言写一条语句,告诉计算机咋做,然后等着出结果就完了。
45 年前,两名年轻的 IBM 研究员将一门关系型语言带到了数据库领域,旨在使用声明性的方式来操作数据。几十年过去了,关系型模型和 SQL 得到了广泛引用,比如 OLTP、OLAP、对象数据库、对象关系型数据库,甚至是 NoSQL 数据库。SQL 也为非关系型数据库带去了设计灵感,比如用于对象数据库的 SQL、用于对象关系的 SQL、用于 XML 的 SQL、用于空间数据的 SQL、用于搜索的 SQL、用于 JSON 的 SQL、用于时序数据的 SQL、用于流的 SQL,等等。各种与数据打交道的 BI 工具也使用了 SQL。事实上,SQL 是最成功的第四代语言。
现在 SQL 不仅是程序员的必知必会,也是运营人员和产品经理的必备技能。你想做自定义的数据分析,最快的方式就是去查询库上写一条 SQL 语句获得自己想要的结果。(注意,不是生产库也不是可写库)
几十年以来,操作系统一直在迭代,语言版本层出不穷,但是 SQL 非常稳定,SQL92 和 SQL99 这两个标准一直沿用到现在,这意味着掌握 SQL 是一件一劳永逸的事情,至少在你的职业生涯中,它都可以发挥作用。
SQL 以关系代数为基础,目标是提供一种接近英语的查询语言:
具有声明性;
可以通过组合的方式写出复杂的查询;
可以利用由 Edger F Codd 开发的关系型模型。
SQL 有多强呢?所有试图摆脱它的技术,最终都是站在 SQL 的肩膀上前行的。
大数据试图在数据仓库领域补足或替换关系型系统,但它们仍然使用了 SQL。Hive、Impala、drill、BigSQL 都使用了基于 SQL 的语言、优化器,并使用了与 SQL 相似的大规模并行处理。它们还时不时地增加新的 SQL 特性。SQL 中的数据存储格式、数据模型和查询处理的分离带来了一些非常重要的好处。在 SQL 诞生以来的 45 年当中,很多数据库来了又去,在 NoSQL 运动浪潮甚至在无意中暗示了 SQL 和 SQL 数据库即将死掉。但 SQL 阵营很坦然地面对这个问题,Don Chamberlin 表示:“当一门语言被广泛认可,以至于其他语言开始标榜自己不同于这一门语言时,说明这门语言一定表现得很好。”
另一个数据库阵营是 NoSQL。虽然现在对 NoSQL 的定义是“Not Only SQL”,但其实 NoSQL 在最开始想要远离 SQL,并尝试使用其他语言和框架,比如 map-reduce。但在十年之后,几乎每一个流行的 NoSQL 数据库都有了 SQL 变种:Couchbase 的 N1QL、Cassandra 的 CQL 和 Elasticsearch 的 ElasticSearch SQL。
关系型模型已经非常成功了,不过 SQL 还支持其他各种数据模型:JSON、图、XML、时序、空间、长列、列式、文档,等等。这些数据库当中大部分都有自己的 SQL 实现版本,即使是 NoSQL 数据库也实现了 SQL 或者受 SQL 启发的查询语言。即使是在最性感的“数据科学”领域,SQL 仍然是一项非常被看重的技能。
为什么 SQL 会如此成功?
可声明性:你只要声明好要输出什么,查询引擎会为你找到最优化的方式来执行查询。Pat Seliner 等人在 1979 年发明的基于成本的优化器一直在持续地提升 SQL 的查询速度。这也提高了其他新进者的准入门槛。最近的一篇 Apache Hive 论文解释了优化器的复杂性。
SQL 不只是被用在“查询”方面,它也被用来更新数据,而存储过程、UDF(用户自定义函数)通过结合过程语言和声明性的 SQL 扩展了 SQL 的能力。
SQL 具有非常好的可延展性。SQL 标准经过多次扩展,每次都加入了很多新特性、新语法和新的关键字。可以肯定的是,并不是所有 SQL 标准都是一样的。即使是 RDBMS 的传统 SQL 实现也不会完全兼容,除非在写 SQL 时非常小心地考虑兼容性问题。除了这些之外,SQL 的精髓都是一样的。SQL++ 是 SQL 进化的一个很好的例子。Don Chamberlin 和 Mike Carey 就 SQL 是否需要支持复杂的数据模型进行过讨论,以便让用户和开发人员可以方便地访问 JSON 格式的数据。Don 撰写的《SQL++ For SQL User: A Tutorial》一书介绍了 SQL++ 的发展情况,SQL++ 是一门被设计用来处理 JSON 数据模型的语言,同时与 SQL 兼容。
SQL 为我们带来了新的想法,扩展了新的数据类型、访问方式和应用场景。
SQL 本身与数据表示是分离的,可以被用在非关系型数据上,比如 CSV、JSON 以及其他所有的大数据格式。有些人认为关系型模型表示非常死板,所以认为 SQL 也是死板的。但事实上,对于给定的 schema,SQL 可以实现任意数据格式的 SELECT、连接、分组、聚合。
做为一个技术人员,我们经常会去追逐更新更炫的技术,但真正的宝藏却是那些经久不衰和朴实无华的东西,比如 SQL、算法、计算机原理、网络协议、编程范式等等。掌握好这些内容,你将不再惧怕任何新技术。万变不离其宗啊。
那你 SQL 学好了吗?你最常用的技术或编程语言是什么呢?可以在留言区分享一下。
卖桃者说,我们明天见。
(编辑:成敏)
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《卖桃者说》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(11)
- 最新
- 精选
- 熊斌前天在我的“每天写500字”中写的主题是技术人员应该“向下走”,走到技术的最底层去,上层技术日新月异,但是最基本的那些东西几乎没有怎么变化,掌握它们,万变不离其宗。否则,基础不牢地动山摇。11
- 谷鱼想想就很复杂,我不想问sql学的怎么样,而是头发怎么样了。每一项底层知识的学习都需要花费大量的时间,加油吧。终于把算法课程看了三十多课。继续加油12
- 桃子-夏勇杰很多人只是掌握了SQL的皮毛而已
- lucklyrs每一个适合自己底层技术都要好好深耕挖掘
- 小斧为什么 SQL 会如此成功? 可声明性:你只要声明好要输出什么,查询引擎会为你找到最优化的方式来执行查询。Pat Seliner 等人在 1979 年发明的基于成本的优化器一直在持续地提升 SQL 的查询速度。这也提高了其他新进者的准入门槛。最近的一篇 Apache Hive 论文解释了优化器的复杂性。 SQL 不只是被用在“查询”方面,它也被用来更新数据,而存储过程、UDF(用户自定义函数)通过结合过程语言和声明性的 SQL 扩展了 SQL 的能力。 SQL 具有非常好的可延展性。SQL 标准经过多次扩展,每次都加入了很多新特性、新语法和新的关键字。可以肯定的是,并不是所有 SQL 标准都是一样的。即使是 RDBMS 的传统 SQL 实现也不会完全兼容,除非在写 SQL 时非常小心地考虑兼容性问题。除了这些之外,SQL 的精髓都是一样的。SQL++ 是 SQL 进化的一个很好的例子。Don Chamberlin 和 Mike Carey 就 SQL 是否需要支持复杂的数据模型进行过讨论,以便让用户和开发人员可以方便地访问 JSON 格式的数据。Don 撰写的《SQL++ For SQL User: A Tutorial》一书介绍了 SQL++ 的发展情况,SQL++ 是一门被设计用来处理 JSON 数据模型的语言,同时与 SQL 兼容。 SQL 为我们带来了新的想法,扩展了新的数据类型、访问方式和应用场景。 SQL 本身与数据表示是分离的,可以被用在非关系型数据上,比如 CSV、JSON 以及其他所有的大数据格式。有些人认为关系型模型表示非常死板,所以认为 SQL 也是死板的。但事实上,对于给定的 schema,SQL 可以实现任意数据格式的 SELECT、连接、分组、聚合。
- 第一装甲集群司令克莱斯特几乎每一个页面的可触动,非静态的元素后面,底层都埋着一条或者多条电缆线-SQL语句。
- 还是很糊涂学calcite吧
- 野区JC打我做开发一来,就知道一句话 "面向sql编程"。可想而知,sql究竟有厉害了。
- 未未的未来最近在使用报表工具,了解到了MPP(大规模并行处理),使用工具的初衷很简单:提高开发效率和降低运维成本。 使用SQL语句查询数据,可以做你想做的任何统计分析。
- 郭凯强万变不离其宗!这句话深有感触,握爪
收起评论