SQL是一个可以随处使用的工具 确是一门被低估的语言

2019-03-01 09:39:57来源:CSDN  

在我的职业生涯中我学习了很多技术,但是我觉得最实用的技术当属 SQL。对我来说,SQL 是最有价值的技术,原因有以下几个方面:

SQL 在不同的职责和学科中都很有价值。

只需学习一次,一劳永逸。

你可以成为超级英雄。掌握这门技术,会让你变得非常强大,因为很多人都没能熟练掌握这门技术。

SQL 是一个可以随处使用的工具

无论你的职责是什么,你都可以通过 SQL 让你工作变得更轻松。目前作为一名产品经理,我的工作重心在于查看数据、分析我们在产品方面的影响以及塑造产品规划蓝图。如果我们刚刚发布了一个新功能,那么相关的数据(比如是否有人查看这个功能等)可能都保存在关系数据库中。如果我正在追踪一些关键性的指标(例如月度增长),那么很可能这些数据也保存在关系数据库中。另外,我们所有的工作(例如系统记录)都需要使用 SQL。掌握如何使用 SQL 可以为我节省大量的工作,因为我无需向他人询问具体的数字。

但是,即使在成为产品经理之前,我也会使用 SQL 来了解系统内部的情况。作为一名工程师,通常我可以通过 SQL 更快地获取我想要的信息,而无需使用 Ruby 或 Python 编写脚本。当我的 webapp 变得非常迟缓时,我必然需要了解其所执行的 SQL 以及优化的方法。当然,这远远超出了对 SQL 基本的理解……但是为查询添加索引就可以解决问题,而无需增加缓存,这还是非常值得花费额外的时间学习。

SQL 的知识具有持久性

我记得大约在20年前,我创建了第一个网页。我感觉非常欣喜,还加入了一些 Java 来强化页面,提示用户点击是/否或提供一些输入。后来,大约在10年前,jQuery 问世了,虽然有时它很冗长,但是学习新功能可以让页面整体上更加美观,所以我重新学习了 JS 的 jQuery 方法。再到后来,Angular - > React / Ember 相继出现,现在为了将基本的 Java 引入我的网站,我需要一整套的流程,而现实情况是我所做的仍然只是让用户点击是/否——与20年前一样。

相反,SQL 却没有太多改变。虽然它已经发生了改变——成为了现代的 SQL,但是我仍然认为与其他技术相比,这点变化几乎微不足道。没错,每隔几年就会一个新的标准问世,偶尔还有新的内容(比如支持窗口函数或CTE),但是 SQL 的基础知识始终如一。只需学习一次 SQL,你就可以在工作中反复使用,而无需重新学习。请不要误会,我喜欢学习新的东西,但我宁愿学习一些真正的新东西,而不仅仅是完成同样任务的另一种方法。

SQL 的独一无二

大多数应用程序开发人员都未能熟练地掌握 SQL,他们没有认真学习这项技术。正因为真正掌握 SQL 的人非常少,所以可能你看起来更加出众。我原来的公司拥有数百名的工程师,每周都有好多人(从初级工程师到高级首席工程师)来问我:“你能帮我看看这个查询该怎么写吗?”因为你掌握了某项很少人掌握的技术,所以你可以帮助别人,而当你遇到困难需要他们帮助时,他们也会义不容辞。

如果你还未能精通 SQL 的话,或许可以马上行动起来。

你怎么看?

对此,网友们也各抒己见:

评论1:

SQL 是我见过的最令人叹为观止的一个概念。它有将近五十年的历史,而且没有丝毫要被取代的迹象。我们创造无数的其他技术来存储和处理数据,但似乎我们总是在设法利用这些技术(例如 Hive,Presto,KSQL等)重建 SQL。

我在经营一家创业公司,为客户构建分析基础架构。我们非常重视 SQL,而本文的内容非常真实。

与普通的软件工程师相比,分析师和数据科学家在工作中编写的 SQL 越来越多。

MMP 数据仓库(redshift,bigquery,snowflake等)的出现,使得即使预算有限的公司也能够使用 SQL 来存储和查询大量数据。SQL 比以往任何时候都更强大,更有价值。

如果注意观察某个普通的企业,你会发现大多数软件工程师都不擅长 SQL。他们怎么能这样?大多数复杂查询都是分析查询。ORM 可以处理应用程序代码需要处理的大多数基本功能。

但是,本文没有提到一点:许多后台的工程师已经抽象出了 SQL,当然还有前端和移动。所以即便你不太了解 SQL 也可以成为一名优秀的开发人员。

另一方面,拥有初级或中级分布式文件系统、流媒体数据或各种其他 NoSQL技术知识的“数据工程师”涌现了出来。通常他们对原始 SQL 的了解甚至比初级工程师更少,因为 SQL 位于他们强大的数据工具的底层。

但是,如果你真正掌握了 SQL,再加上如今掌握这项技术的少之又少,所以你可以拥有巨大的权力。可能比以往任何时候都强大。

评论2:

众所周知,SQL 是关系数据库语言,其基础是关系代数与集合论,因为有了这样强大的后盾与坚固的基础,所以 SQL 可以经受住时间的考验而长久不衰。也正是因为这个原因,历经多年乃至在不同的职责下你也不需要重新学习。

但是,这并不是说 SQL 就是完美的,事实上 SQL 距离“完美”还差得非常远。因为 SQL 还有很多未能很好地支持,甚至背离关系模型之处。

举个最简单的例子,关系模型基于二值逻辑(即真/假),而 SQL 是三值逻辑:真、假、NULL。平白多出一个 NULL,其引发的问题也非常多,例如:

(A = B) OR (A<>B)

很显然这是一个恒真表达式,要么相等,要么不相等,还有第三种选择吗?有!在 SQL 中,如果 A 为 NULL 或 B 为 NULL,则这个表达式的结果为 NULL。

除此之外,还有 SQL 中有重复数据,但是集合论中没有,重复的数据在集合中会被视作一个。

最后再说一个,集合中的数据项没有顺序,而 SQL 表中的列有从左到右的顺序。

所以,我们希望 SQL 能够紧紧围绕关系代数与集合论,取得更好的成长与发展。

标签: SQL 工具 语言

相关阅读

相关词

推荐阅读