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且插入记录已生成自增主键正确值),但是查询数据库相应表时发现表中并无相应记录,通过直接在表中插入测试数据 ...
随机推荐
- Image和Base64互相转换
base64介绍: Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息.例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长 ...
- 【Android Studio安装部署系列】十六、Android studio在layout目录下新建子目录
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 一般用于分类显示不同模块的layout布局文件. 在res/layout文件夹下创建子目录 res/layout鼠标右键——New— ...
- 跟王思聪热狗图一样大热的Redis,还不赶紧来Get一下?
前言 不禁喊出一句ig牛逼!哈哈哈 这个话题是不是有点过时了?但说到Redis,真的是被强行灌输的,到处都会被安利Redis,吓得只会mysql和oracle的我,赶紧去get一波.. 数据库种类 关 ...
- 09 使用Tensorboard查看训练过程
打开Python Shell,执行以下代码: import tensorflow as tf import numpy as np #输入数据 x_data = np.linspace(-1,1,30 ...
- JVM(六)为什么新生代有两个Survivor分区?
本文会使用排除法的手段,来讲解新生代的区域划分,从而让读者能够更清晰的理解分代回收器的原理,在开始之前我们先来整体认识一下分代收集器. 分代收集器会把内存空间分为:老生代和新生代两个区域,而新生代又会 ...
- C#/VB.NET设置Excel表格背景色
在查看很多有复杂的数据的表格时,为了能够快速地找到所需要的数据组时,往往需要对该数据组进行分类,一个简单快速的方法就是对数据组所在的单元格填充背景颜色,这样就使得我们在阅读文件时能够直观的看到数据分类 ...
- org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component
原因:jdk1.8和你所用框架(spring+springMVC+mybatis)中spring框架的版本有问题, 解决方法:更换jdk1.7或者1.6
- 折腾Java设计模式之模板方法模式
博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...
- Spring MVC(三)控制器获取页面请求参数以及将控制器数据传递给页面和实现重定向的方式
首先做好环境配置 在mvc.xml里进行配置 1.开启组件扫描 2.开启基于mvc的标注 3.配置试图处理器 <?xml version="1.0" encoding=&qu ...
- Django 使用 locals() 函数
locals() 函数会以字典类型返回当前位置的全部局部变量. 在 views.py 中添加 from django.shortcuts import render,HttpResponse,rend ...