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且插入记录已生成自增主键正确值),但是查询数据库相应表时发现表中并无相应记录,通过直接在表中插入测试数据 ...
随机推荐
- SQL自动生成java实体类POJO
前言 当我们设计完成数据库之后,通常需要创建对应的实体类,有的称为Entity,有的称为DO,都是一个意思,而自己一个个去写非常的麻烦,所以麻烦的时候就需要相应的自动工具类解决这样的麻烦.超级方便~ ...
- Abp中使用可视化的日志面板
Abp中使用可视化的日志面板 如果你还不了解LogDashboard请看这里. ABP的相关知识不做介绍如果有需要请阅读ABP官方文档 ABP是Net下非常优秀的开发框架,在中国很多的项目都正在使用它 ...
- .NET西安社区 [拥抱开源,又见 .NET] 第二次活动简报
「拥抱开源, 又见 .NET」 随着 .NET Core的发布和开源,.NET又重新回到人们的视野. .NET Core的下个3.0即将release,加入非常多的新功能,越来越拥抱变化,DevOps ...
- Spring基础系列-Web开发
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9996902.html SpringBoot基础系列-web开发 概述 web开发就是集成 ...
- axios(封装使用、拦截特定请求、判断所有请求加载完毕)
博客地址:https://ainyi.com/71 基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 Node.js 中使用 vue2.0之后,就不再对 vue-resource 更新 ...
- c#封装DBHelper类
public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> None, /// <s ...
- SpringEl表达式(转)
什么是SpringEL? Spring3中引入了Spring表达式语言—SpringEL,SpEL是一种强大,简洁的装配Bean的方式,他可以通过运行期间执行的表达式将值装配到我们的属性或构造函数当中 ...
- mysql事件调度器使用
--设置事件调度器 开启SET GLOBAL event_scheduler = ON; --查看事件调度器 是否开启 on开 off关SHOW VARIABLES LIKE 'event_sche ...
- Yii2设计模式——注册树模式
应用举例 在Yii.php中: <?php class ServiceLocator extends Component { //保存实例化的对象,每个对象都是单例,且有唯一string类型的I ...
- MySQL索引初探
一.什么是索引? 帮助数据库系统实现高效获取数据的数据结构 索引可以帮助我们快速地定位到数据而不需要每次搜索的时候都遍历数据库中的每一行. 二.常见实现方式有哪些? 常见索引模型有三种:哈希表.有序数 ...