sql是最成功的第四代语言
SQL发展的前世今生
很多年前,两名年轻的IBM研究员将一门关系型语言带到了数据库领域,旨在使用声明性的方式来操作数据。从Don Chamberlin和Ramond Boyce发表"SEQUEL:一门结构化的英语查询语言"以来,关系型模型和SQL已经得到了广泛发展,并被用在大量的技术中,如OLTP、OLAP、对象数据库、对象关系型数据库,甚至是NoSQL数据库。
SQL也为非关系型数据库带去了设计灵感,比如用于对象数据库的SQL、用于对象关系的SQL、用于XML的SQL、用于搜索的SQL、用于JSON的SQL、用于时序数据的SQL、用于流的SQL等等,。各种与数据大乱交到的BI工具也使用了SQL。事实上,SQL是最成功的第四代语言。
SQL以关系代数作为基础,目标是提供一种接近英语的查询语言:
1.具有声明性。
2.可以通过组合的方式写出复杂的查询。
3.可以利用由Edger F Codd开发的关系型模型。
大数据试图在数据仓库领域补足或替换关系型系统,但他们仍然使用了SQL。
Hive、Impala、drill、BigSQL都使用了基于SQL的语言、优化器,并使用了与SQL相似的大规模并行处理。它们还时不时地增加新的SQL特性。SQL中的数据存储格式、数据模型和查询处理的分离带来了一些非常重要的好处。在SQL诞生以来的这些年中,很多数据库来了又去。NoSQL运动浪潮甚至在有意无意中暗示了SQL和SQL数据库即将死掉。但SQL阵营很坦然地面对这个问题:当一门语言被广泛认可,以至于其它语言开始标榜自己不同于这一门语言时,说明这门语言一定表现得很好。
另一个数据库阵营就是NoSQL了。虽然现在对NoSQL的定义是Not Only SQL,但其实NoSQL在最开始想要远离SQL,并尝试使用其它语言和框架,比如map-reduce。但在十年之后,几乎每一个流行的NoSQL数据库都有了SQL变种:Couchbase的N1QL、Cassandra的CQL和Elasticsearch的ElasticSearch SQL。你可能会说MongoDB并没有SQL,但实际上它肯定会有一个非常简单的SQL实现。
关系型数据库已经非常成功了,不过数据库还支持其它各种数据模型:JSON、图、XML、时序、空间、长列、列式、文档等等。这些数据库当中大部分都由自己的SQL实现版本,即使是NoSQL数据库也实现了SQL或者受SQL启发的查询语言。即使是在最性感的数据科学领域,SQL仍然是一项非常被看重的技能。
可能讽刺的是,NoSQL数据库中的SQL项目比SQL数据库中的SQL项目还要多。

SQL成功的秘诀
SQL的神秘与成功,来源于它自身的强大:
1.可声明性:你只要声明好要输出什么,查询引擎就会为你找到最优化的方式来执行查询。Pat Seliner等人在1979年发明的基于成本的优化器一直在持续地提升SQL的查询速度。这也提高了其他新进者的准入门槛。优化器有着非凡的复杂性。
2.SQL不只是用在查询方面,它也被用来更新数据。而存储过程、UDF(User Defined Function,用户自定义函数)通过结合过程语言和声明性的SQL也扩展了SQL操作数据方面的能力。
3.SQL具有非常好的可延展性。SQL标准经过多次扩展,每次都加入了很多新特性、新语法和新的关键字。可以肯定的是,并不是所有SQL标准都是一样的。即使是RDBMS的传统SQL实现也不会完全兼容,除非在写SQL的时候非常小心地考虑兼容性问题。除了这些之外,SQL的精髓都是一样的。SQL++是SQL进化的一个很好的例子,它是一门被设计用来处理JSON数据模型的语言,同时与SQL良好兼容。
4.SQL为我们带来了新的想法,扩展了新的数据类型、访问方式和应用场景。
5.SQL本身与数据表示是分离的,可以被用在非关系型数据上,比如CSV、JSON以及其他所有的大数据格式。有些人认为关系型模型表示非常死板,所以认为SQL也是死板的。但实际上,对于给定的schema,SQL可以实现任意数据格式的SELECT、连接、分组或聚合。
SQL的前景
N1QL的作者Gerald Sangudi曾经表示,SQL是非常成功的,因为它代表了数据处理的基本操作。SQL支持一组丰富的操作,SELECT、连接、嵌套、分组、聚合、HAVING、WINDOW、排序、分页等等。在谈到数据操作时,这些就是我们要考虑的所有东西吗?这个问题还有待观察,不过我们可以肯定的是,其它语言(如Python和Java)正在为这些数据操作添加运算符,可能其它语言会跟风也说不定。SQL语言已经走到了关系型模型没能走到的地方。
"你以为的岁月静好,不过是有人替你负重前行,为你遮风挡雨。生活从来都不容易。"
sql是最成功的第四代语言的更多相关文章
- 【转】SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误
SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误 最近在VS2013上连接远程数据库时,突然连接不上,在跑MSTest下跑的时候,QTAgent32 crash.换成IIS ...
- 使用SQL Server 2008远程链接时SQL数据库不成功的解决方法
关键设置: 第一步(SQL2005.SQL2008): 开始-->程序-->Microsoft SQL Server 2008(或2005)-->配置工具-->SQL Serv ...
- [Oracle]Sqlplus连接成功,但pl/sql连接不成功,提示“ora-12145:无法解析指定的连接标识符”
Oracle客户端安装成功后,使用Net Manager配置成功,测试服务成功.使用Sqlplus连接成功.但使用pl/sql developer连接总是提示“ora-12145:无法解析指定的连接标 ...
- SQL server 安装成功到使用Sa SQL server验证登录等一系列问题
使用 Windows 身份验证方式登录 出现错误 无法连接到 本地服务器 解决问题: SQL server配置管理器:服务远程过程调用失败 https://blog.csdn.net/gfjjggg/ ...
- PL/SQL联系oracle成功可以sql解决的办法是检查表的名称无法显示
有时,因为机器突然断电或其他原因PL/SQL它甚至不能在数据库表后显示.序列和其它元素.使用SQL Windows运行查询一般查询,登录或同样的现象再次. 我是不是可以解决因重复登录的猜测是,PLSQ ...
- Java sql server数据库连接成功
import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.sql ...
- 在DAO的查询操作里,数据库查询到记录,sql语句也成功执行,但是返回的对象是null
在这里 如果改成User user=null; 后面 对user对象的赋值是会失败的. 原因: 要赋值的话,一定要有对象,要new一下给对象分配空间然后再给对象赋值.
- 一个小时成功安装SQL Server 2012图解教程
在安装微软最新数据库SQL Server 2012之前,编者先确定一下安装环境:Windonws 7 SP1,32位操作系统.CPU是2.1GHz赛扬双核T3500,内存2.93GB. 安装SQL S ...
- SQL(insert、delete、update)执行成功,但是数据库表中无显示无记录
如题,程序中insert一条记录,调试过程中根据执行结果发现此条sql已经执行成功(影响行数为1且插入记录已生成自增主键正确值),但是查询数据库相应表时发现表中并无相应记录,通过直接在表中插入测试数据 ...
随机推荐
- Dubbo简介
1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...
- LVS(五)LVS的持久连接
什么是持久链接 把某个客户端的请求始终定向到同一应用服务器上.对于LVS来说持久连接和算法没有关系.也就是使用任何算法LVS都可以实现同一客户端的请求转发到之前选定的应用服务器,以保持会话.而且还能实 ...
- SpringBoot整合Jsp和Thymeleaf (附工程)
前言 本篇文章主要讲述SpringBoot整合Jsp以及SpringBoot整合Thymeleaf,实现一个简单的用户增删改查示例工程.事先说明,有三个项目,两个是单独整合的,一个是将它们整合在一起的 ...
- 旅游公司租车问题 —— 动态规划 v.s. + Leapms线性规划
有一个旅游公司承包一条旅游线路,未来四周内的大巴车需求分别是:4辆.1辆.4辆和5辆.该公司向租车公司租赁服务,租车公司的计价方案是:租车收取一次性手续费3000,每车每周费用2000.求最节省租车方 ...
- 使用nginx搭建高可用,高并发的wcf集群
很多情况下基于wcf的复杂均衡都首选zookeeper,这样可以拥有更好的控制粒度,但zk对C# 不大友好,实现起来相对来说比较麻烦,实际情况下,如果 你的负载机制粒度很粗糙的话,优先使用nginx就 ...
- Oracle的坑,你是否踩过?----安装篇
作为一个职场的新人,之前都是接触Sql server 数据库比较多,Oracle这方面基本没有接触过,然后这次公司刚好有个项目用到了Oracle数据库,然后就打算学习一下这方面的知识.然后昨天安装Or ...
- Excel的读取和保存(POI)
示例 Excel文件: 数据读取: 保存路径: Jar包准备 下载地址: 链接:https://pan.baidu.com/s/1RZAwEsFwjKMlnYYGwHMfaA 提取码:h9mj 文件上 ...
- PHP 安装扩展 phpize
报错 执行 phpize 时, 报如下错误: grep: /usr/include/php/main/php.h: No such file or directory grep: /usr/inclu ...
- 微信小程序 选择微信自带的地址 用户授权选择了拒绝
// 选择微信自带地址 addAddr:function () { wx.chooseAddress({ success: function (res) { self.setData({ addrIn ...
- GDAL坐标转换
一.引言 最近研究了一下GIS.测绘学的坐标转换的问题,感觉大部分资料专业性太强,上来就是一通专业性论述:但感觉对于相关从业者来说,其实不必了解那么多背景知识的:就通过GDAL这个工具,来简单总结下坐 ...