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且插入记录已生成自增主键正确值),但是查询数据库相应表时发现表中并无相应记录,通过直接在表中插入测试数据 ...
 
随机推荐
- 分享一些 Kafka 消费数据的小经验
			
前言 之前写过一篇<从源码分析如何优雅的使用 Kafka 生产者> ,有生产者自然也就有消费者. 建议对 Kakfa 还比较陌生的朋友可以先看看. 就我的使用经验来说,大部分情况都是处于数 ...
 - ASP.NET Core中使用GraphQL - 第六章  使用EF Core作为持久化仓储
			
ASP.NET Core中使用GraphQL ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间件 ASP ...
 - 【Android Studio安装部署系列】七、真机运行项目
			
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 简单介绍下真机运行项目的操作步骤. 手机连接电脑 将手机通过数据线连接到电脑上,此时电脑会自动下载安装驱动程序.如果没有安装上的话, ...
 - C#列表页面
			
前台页面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Index.aspx ...
 - C# 曲线上的点(二) 获取距离最近的点
			
如何在一条曲线上,获取到距离指定点最近的点位置? 与上一篇 C# 曲线上的点(一) 获取指定横坐标对应的纵坐标值 类似, 我们通过曲线上获取的密集点,通过俩点之间连线,获取连线上最近的点.我们能够获取 ...
 - revit二次开发wpf里button按钮无法实现事务
			
不能在revit提供的api外部使用事务,解决此方法, 1.把button里要实现的功能写到外部事件IExternalEventHandler中,注册外部事件,在button事件中.raise()使用 ...
 - hive基本操作与应用
			
通过hadoop上的hive完成WordCount 启动hadoop Hdfs上创建文件夹 上传文件至hdfs 启动Hive 创建原始文档表 导入文件内容到表docs并查看 用HQL进行词频统计,结果 ...
 - [笔记]记录原开发工作在base命名空间下扩展的属性与方法
			
前言 该笔记只是为了记录以前开发使用的方式. 处理命名空间namespace /** * 处理命名空间 * @param {string} 空间名称,可多个 * @return {object} 对象 ...
 - 生鲜配送管理系统_升鲜宝供应链系统V2.0 设计思想及主要模块,欢迎大家批评指点。
			
前言: 经过这几年的开发,升鲜宝生鲜供应链系统管理软件,终于完成C/S与B/S二个版本的开发,先主要介绍B/S版本的功能,C/S版本的功能更加完善. 升鲜宝供应链系统主要由以下几个主要端组成: ...
 - Android为TV端助力 转载:RecyclerView分页加载
			
package com.android.ryane.pulltoloaddata_recyclerview; import android.os.Handler;import android.os.L ...