SQL 诞生 48年了!为什么我们仍在使用它?

Aidan075 等级 622 0 0

SQL 诞生 48年了!为什么我们仍在使用它?

为什么我们仍在使用 SQL?

SQL 和关系数据库管理系统(RDBMS)都是在 上世纪70 年代早期开发的。Edgar F. Codd 开发了 RDBMS,而 Donald D. Chamberling 和 Raymond F. Boyce 开发了 SQL。

二者都诞生在计算机技术的早期,而且在 90% 的时间里都非常有效,使得数据库成为了一项 “已经被解决的问题”。就像 MailChimp 已经成为了发送新闻简讯的同义词。如果你想使用数据库,你就得使用 RDBMS 和 SQL。

不过,仍然还是有人使用其他 email 软件,正如还是用人使用非 SQL 的数据库。但即使是存在着其他可供使用的数据库技术,SQL 依旧占据霸主地位。

以下 8 条,就是我们在 SQL 诞生 48 年后依旧使用它的原因。

1. 数据处理能力

SQL 最初基于关系代数和元组关系演算——由 Codd 特别为关系数据库开发的两种数学模式。

SQL 诞生 48年了!为什么我们仍在使用它?

所以,SQL 是特别为处理数据而设计的,而事实证明,它非常善于存取和组织数据。

那么第一个原因就是:作为一种数据库技术,SQL 非常称职。

2. 实践检验

RDBMS 已经问世很长时间了,所以已经用于了大量不同的情况。在 “前网络时代”,它就作为线下数据库使用,到如今,有了重大修改的 SQL 数据库,仍在 Facebook 这样的全球性 app 中扮演中核心角色——RDBMS 和 SQL 已经久经沙场。而在众多产品中运行过的无数个小时,证明了它们是可信赖的。

有些软件就是能解决问题,尤其是当你在处理充斥着丢失、损坏和失败等问题的数据库时,这种优势尤为明显。作为成熟的软件,SQL 有着备份计划、变化管理和操作严谨性,而这些会使棘手的情况大为好转。因此,SQL 数据库几乎总是最好的选择。

3. 知识和社区

当事物存在一段时间之后,围绕着它的知识体系就会被建立。SQL 也不例外。最过去的时间里,大量的 SQL 知识被写成文档,SQL 社区快速发展,许许多多的技术人才成长了起来。

因为 SQL 社区如此活跃,SQL 文档又如此丰富,所以它便吸引了大量的人才和商业活动。而又因为 SQL 吸引了大量的人才,所以 SQL 社区更加壮大,知识更加深入。这就是多年来 SQL 的发展状况。

4. 简单

计算机语言发展了这么久,直到今天,SQL 仍然是一种非常易学的语言。短短几天,你就可以学会基本的功能,能够进行查询和返回数据。非常简单。

即使是传统意义上的非技术岗位,比如市场,公司高管,以及非技术性的产品经理,都会去学习基本的 SQL 功能,来支持他们的工作。

而深入地了解 SQL 基于的关系型数据库系统,完全是另一件事。对于大多数只需要使用查询功能的人来说,SQL 真是太好用了。

5. 高度普及

因为有半数的开发者都会使用 SQL 和 RDBMS,所以我们可以肯定地说,这两者高度普及。这绝不是一件坏事。正如上文所说,由于使用人数多,相关知识和社区得以快速发展。而又由于其简单,故而对于开发者以及其他相关人员来说,SQL 知识几乎是常识。

于是,相关知识就极易在公司、产业之间传播,人才储备充足。而这又反过来促进了知识的创造和社区的成长。

可见,SQL 数据库普及度极高的特性,已经为其自身的成长构筑了一个良性循环。

6. 开源及互操作性

从 1995 年至今,开源的 SQL 技术(MySQL 和 PostgreSQL)已经成为了主要的 SQL 数据库技术。

SQL 诞生 48年了!为什么我们仍在使用它?

开发者使用的数据库技术排行, Stack Overflow

其实,PostgreSQL 是开发者最希望使用的数据库技术之一。尽管它领先的幅度很小,且被 MongoDB 大幅超越。

SQL 诞生 48年了!为什么我们仍在使用它?

开发者最希望使用的数据库技术排行, Stack Overflow

这种向开源 SQL 数据库切换的趋势,对于已经规模庞大的 SQL 社区来说是一件好事。同时这种趋势的存在也印证了,SQL 社区中的开发者们正在努力地使 SQL 变得更好。

7. 能用 SQL 谁还写代码?

坊间流传着这样一句话……

能用 SQL server 做好的事情就别写代码。

这句话背后的逻辑是,在绝大多数情况下,SQL 都能找到最有效的办法来完成你的任务,而且做得比任何能自己写代码来解决的人更好。

举个例子。假设我们需要建立一份关于 “加利福尼亚 2020 年第三季税收” 的报告,具体做法是,选出列表中加利福尼亚的用户,并按照数据进行排列。那么你只需要一句 SQL 语句就可以完成:

SELECT SUM(Value_USD) AS California_Revenue_Q3 FROM Transactions WHERE Location = ‘California’ AND DATEPART(q, Date) = 3 AND YEAR(Date) = 2020;

而如果你要按照不同的地区对数据进行分解,那么 SQL 语句是这样的:

SELECT Location, SUM(Value_USD) AS Revenue_Q3 FROM Transactions WHERE DATEPART(q, Date) = 3 AND YEAR(Date) = 2020 GROUP BY Location ORDER BY Location;

如果你想得到税收最高的 5 个区域:

SELECT TOP 5 Location, SUM(Value_USD) AS Revenue_Q3 FROM Transactions WHERE DATEPART(q, Date) = 3 AND YEAR(Date) = 2020 GROUP BY Location ORDER BY SUM(Value_USD) DESC;

如果你想用其他语言来进行这些查询,情况就会复杂很多,既耗时间,语句也长得多。设计 SQL 就是为了切割数据,而且看起来 SQL 做得非常好。毕竟,不是数据因计算而存在,而是计算因数据而存在。

8.SQL/RDBMS 和 NoSQL/DBMS 数据库各司其职

数据库是工具。工具不应该只有斧子,还应该有扳手,螺丝刀,锯子等等。每一种工具各司其职,解决不同的问题。而每一种数据库都长于一些事情,而短于另一些事情。

当你无法预见数据汇总或数据用途的所有可能性,但又需要表示一个系统中各部分的关系时,关系数据库就是最好的选择。而且老实说,大部分系统在这方面做得并不好。再者,SQL 语言本身提供了一种用户友好型的数据组织方式。

SQL/RDBMS 只是众多工具中的一种,且刚好在很多情况下都是切实能用的那种。而当需要保证数据的完整性、一致性时(比如金融领域),SQL/RDBMS 就是最好用的工具。SQL 数据库有它们自身的缺点,且对于某些工作来说,并不是最好的选择。但在大部分情况下,它们可以轻松打败其他非 SQL 数据库。

有些人会担心数据规模的问题,但实际上,只有很小一部分人需要解决 RDBMS 的扩容问题——毕竟你不是 Facebook 或者 Google。因此,你仍然可以用 SQL 数据库管理数一百万计的用户信息,而不出现任何问题。

更何况,只要知道如何权衡利弊,RDBMS 是可以扩容的。

再用 48 年?

尽管数不清的其他数据库系统和技术,都在不断扩大着使用人群,但是,毫无疑问地,SQL 数据库在可预见的未来甚至更远,会一直发挥作用。随着大数据,深度学习和物联网的到来,即使 SQL 数据库再流行 48年也不奇怪。

确实,SQL 数据库是有缺点的。但在绝大多数的案例中,庞大的社区,简单的语言,以及有强大的 RDBMS 作为其基础,使得 SQL 成为了最好的选择之一。

为什么我们在 SQL 诞生 48 年后还一直使用它呢?因为它能用,而且在 90% 的情况中都能完成任务。这对于身处越来越复杂的技术与集成环境中的开发者而言,就是最大的优点。

来自:码农网

www.codeceo.com/article/why-we-use-43-years-old-sql.html

SQL 诞生 48年了!为什么我们仍在使用它?

本文转转自微信公众号凹凸数据原创https://mp.weixin.qq.com/s/5orsJfIfwICmxZ1fGIXuAw,可扫描二维码进行关注: SQL 诞生 48年了!为什么我们仍在使用它? 如有侵权,请联系删除。

收藏
评论区

相关推荐

SQL 诞生 48年了!为什么我们仍在使用它?
(https://imghelloworld.osscnbeijing.aliyuncs.com/a784e838a6d497b87a19798716e69fe8.png) 为什么我们仍在使用 SQL? SQL 和关系数据库管理系统(RDBMS)都是在 上世纪70 年代早期开发的。Edgar F. Codd 开发了 RDBMS,而 Do
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
LEAD函数在数据分析中的应用
点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 [SQL数据库基础知识汇总](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzA3MTg4NjY4Mw%3D%3D%26mid%3D2457300844
SQL
当数据库中数据量特别大的时候,查询的速度就比较慢,这时候需要添加索引,来提高查询速度。 索引的优点 1>通过创建唯一索引,可以保证数据库表中每行数据的唯一性。 2>加快数据查询速度 3>在使用分组和排序进行数据查询时,可以显著的减少查询中分组和排序的时间 索引的缺点 1>维护索引需要消耗数据库资源 2>索引需要占用磁盘空间,索引文件可能会比数据
SQL
      今天要和大家分享的是最近新学的SQL-Server查询数据库的内容       数据库贴近我们的生活,渗透在生活的方方面面,几乎处处都能用到。先来给大家介绍一下数据库。数据库能够高效的条理分明的存储数据,它的优势有以下几点:        1. 可以结构化存储大量的数据信息,方便用户高效的检索。        2. 可以满足数据的共享和安全
SQL优化小讲堂汇总
点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 [SQL基础知识汇总](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzA3MTg4NjY4Mw%3D%3D%26mid%3D2457298998%26
SQL慢查询
(一)慢sql一 ======== ### 问题发现 将应用发布到生产环境后,前端页面请求后台API返回数据,发现至少需要6s。查看到慢sql: ![](https://oscimg.oschina.net/oscnet/a81e2a47-6511-4fd1-a6e6-9d7146abe179.jpg "慢sql定位.png") 慢sql定位.png
SQL数据同步到ELK(四)
一、相关文档 ====== 老规矩,为了避免我的解释误导大家,请大家务必通过官网了解一波SQL SERVER的相关功能。 文档地址: 整体介绍文档:[https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-tracking-sql-serv
mysql 增删改查
sql语句规范 ======= sql是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。 在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持sql。
mysql数据库批量执行sql文件对数据库进行操作【windows版本】
**起因**: 因工作需要,在本机测试环境升级mysql数据库,需逐条执行mysql数据库的sql文件对数据库进行升级,因此找了些关于mysql的文章,对批量升级数据库所需的sql文件进行升级。 **整理思路**: 1. 首先,需要对所需升级的sql所在目录的sql文件进行遍历。生成新的批量执行sql文件。想到是windows系统安装的mysql,首先
BeetlSQL 3.2.8 发布,Java 数据库访问工具
本次发布增加了一个贴心功能,可以限制Mapper方法中的SQL长度,以避免过长SQL导致难以维护 * 配置属性 MAPPER\_SQL\_MAX\_LENGTH,限制Mapper中的SQL长度,默认不限制 * 代码自动生成的ID使用@AssingID 无论是JAP,还是SpringData,还是MyBatis,还是BeetSQL,都支持Mappe
BeetlSQL3.0.0 轻松集成Spring
喜欢看代码直接看代码,了解如何简单集成,主从库集成,动态SQLManager集成 * [集成SpringBoot](https://gitee.com/xiandafu/beetlsql/tree/3.0/sql-integration/sql-springboot-starter "集成SpringBoot") * [集成Spring](http
JFinal3.0 sql管理与动态生成
[原文:](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.jianshu.com%2Fp%2F99e14864e7cd) 本节学习目标主要是使用JFinal中自带的Template Engin来实现对sql的管理。JFinal中为sql管理提供了3个指令#sql、#para、#n
MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
作者:阿进的写字台 cnblogs.com/homejim/p/9909657.html 温馨提示:文中代码看不全可左右滑动 MyBatis 令人喜欢的一大特性就是动态 SQL。 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的。 MyBatis 动态 SQL 的出现, 解决了这个麻烦。 MyBatis通过 OGNL 来进
Spark SQL重点知识总结
一、Spark SQL的概念理解 ================ Spark SQL是spark套件中一个模板,它将数据的计算任务通过SQL的形式转换成了RDD的计算,类似于Hive通过SQL的形式将数据的计算任务转换成了MapReduce。 **Spark SQL的特点:** 1、和Spark Core的无缝集成,可以在写整个RDD应用的时候,配