SQL标准的历史

article/2025/11/6 0:46:26

SQL标准已经存在30多年了,它改变了吗?绝对的!了解从SQL-86到现代SQL(当今的标准数据语言)的过程。

SQL是IBM在20世纪70年代由IBM公司创建的。1974年,Donald Chamberlin和Raymond Boyce发表了SEQUEL:《A Structured English Query Language》,将SQL引入了世界。这篇文章包含了该语言的BNF语法(对该语言语法的详细技术描述),IBM后来认为这是一个错误。该语法的发布允许不同的供应商在他们自己的数据库引擎中实现SQL。然而,各供应商的SQL实现之间有相当多的变化,因为每个供应商都引入了自己的SQL扩展。到20世纪80年代中期,不同SQL版本之间出现了大量的不兼容。

也是在20世纪80年代,美国国家标准协会(ANSI)开始研究SQL标准。引入一个标准的目的是支持SQL应用程序在符合标准的产品之间的可移植性。

SQL-86

第一个SQL标准是SQL-86。它于1986年作为ANSI标准和1987年作为国际标准化组织(ISO)标准发布。ISO标准的起点是IBM的SQL标准实现。这个版本的SQL标准也被称为SQL1。

SQL-86标准共120页。它包含SELECTINSERTUPDATEDELETE语句的语法。SELECT语法允许使用WHERE进行过滤,使用带有几个列的GROUP BY(但不允许使用表达式),并使用HAVING过滤GROUPS。没有显示的JOIN语法:可以在FROM子句中列出多个表,从而获得一个交叉连接,随后你可以使用WHERE进行筛选。无法使用OUTER JOINs语法执行。但是,SELECT语法允许子查询。

该标准还具有模式定义语法:你可以创建表(仅使用UNIQUENOT NULL约束)、创建视图和授予特权。标准中引入的数据类型是字符串和数字(NUMERICDECIMALINTERGERSMALLINTFLOATDOUBLE PRECISION)。没有ALTERDROPREVOKE语句。还可以将SQL嵌入到各种编程语言中(Cobol、Fortran、Pascal和PL/1)。

通常,你可以从ISO或ANSI购买标准文档,甚至是旧的和退出的版本。然而,正如Evan Carroll在他的Stack Overflow文章中所分享的那样,现在掌握SQL-86标准并不容易。但是如果你感兴趣,可以在FIPS-127的名称下找到SQL-86.

SQL-89

下一个SQL标准是1989年发布的SQL-89。这是早期标准的一个小修订,是取代SQL-86的SQL-86的超集。标准的尺寸没有改变。

最重要的新特性是完整性约束:除了已经可用的视图中的UNIQUENOT NULLCHECK选项之外,它还添加了主键、外键以及DEFAULTCHECK约束。该标准还为C和Ada添加了新的语言绑定。

SQL-92

该标准的下一个修订版是SQL-92——这是一个重大的修订版。由SQL-92引入的语言有时被称为SQL2。标准文件从120页增加到579页。然而,增长的主要原因是现有功能的更精确规范。

最重要的新特性如下:

  • 显示的JOIN语法和outer joins的引入:LEFT JOINRIGHT JOINFULL JOIN
  • NATURAL JOINCROSS JOIN的介绍
  • 集合操作的介绍(set union, set intersection, set difference)
  • 条件表达式CASE WHEN的引入
  • 新的标量操作:string concatenation, substring extraction和日期和时间数学。
  • CAST操作符,它允许显示地将值转换为类型。

SQL-92还引入了新的数据定义语句:表和视图的ALTERDROP,以及新的数据类型(date日期,time时间,timestamp时间戳,interval间隔,bit string位串,varchar string字符串和national character strings国家字符串)。这个版本增加了一个信息模式(获取数据库元数据的标准方法,如表名、表列、列类型和表约束)。它还引入了临时表、事务隔离级别和查询的动态执行(动态SQL)。

SQL标准被划分为三个一致性级别:条目(条目级SQL-92类似于SQL-89,具有完整性约束),中间和完全。

SQL-92是当今关系数据库中使用的查询语言的基础。当人们谈论“SQL”时,大多数人指的是SQL-92。1992年就已经存在的数据库修改了它们的SQL实现,以符合该标准。较新的数据库使用该标准作为其实现的参考。

SQL-92仍然是人们在学校里教授的“SQL”。当然,SQL-92是学习SQL的一个很好的起点。对很多人来说,做他们日常的工作,它是足够了。当你需要高级特性时,你可以稍后再学习它们。大多数数据库支持SQL-92。没有一个实现是100%符合标准的,但是不兼容性并不是那么重要,特别是当你刚刚开始的时候。

SQL:1999 

SQL:1999(也称为SQL3)是SQL标准的第四版。从这个版本开始,标准名称使用冒号而不是连字符,以与其他ISO标准的名称一致。该标准在1999年至2002年期间分多次发布。

SQL:1999的第一部分有5个部分:

第1部分:SQL/Framework(100页)定义了SQL的基本概念。

第2部分:SQL/Foundation(1050页)定义了SQL的基本语法和操作:类型、schemas模式、表、视图、查询和更新语句、表达式等等。这部分对于普通SQL用户来说是最重要的。

第3部分:SQL/CLI(调用级接口)(514页)为SQL定义了一个应用程序编程接口。

第4部分:SQL/PSM(持久存储模块)(193页)定义了SQL变得过程化SQL procedural的扩展。

第5部分:SQL/Bindings(270页)定义了在标准编程语言编写的应用程序中嵌入SQL语句的方法。

后来又发布了另外三个部分,它们也被认为是SQL:1999的一部分。

1999引入了许多现代SQL的重要特性。其中最重要的是公共表达式(Common Table expression, CTEs)。这是一个非常有用的特性,它使你可以组织长而复杂的SQL查询,并使它们更具可读性。当使用WITH [RECURSIVE]语法时,CTEs还可以递归地处理分层数据。

SQL:1999还引入了OLAP(在线分析处理)功能,其中包括在准备业务报告时很有帮助的特性。此时,GROUP BY扩展ROLLUPCUBEGROUPING SETS进入了标准。

SQL:1999标准中对SQL的一些小的补充包括使用ORDER BY中的表达式,包含大型二进制对象(LOB和CLOB)的数据类型,以及引入触发器。

SQL标准的规模在1992年到1999年间显著增长。SQL-92标准几乎有600个页面,但是普通SQL用户仍然可以访问它。Christopher Date和Hugh Darwen的《SQL标准指南》等书讨论并解释了SQL-92标准。

从SQL:1999开始,这个标准——现在已经有2000多页了——普通的SQL用户不再可以访问。它已经成为数据库专家和数据库供应商的资源。该标准指导了SQL在主要数据库中的开发;它展示了哪些新的语言特性值得实现以保持最新。它还标准化了新的SQL特性的语法,确保主要数据库以类似的方式实现它们,使用类似的语法和语义。

SQL标准角色的变化是因为不再有一个官方机构对标准的符合性进行认证。直到1996年,国家标准与技术协会(NIST)的数据管理标准项目认证SQL DBMS符合SQL标准。现在,供应商自我认证其产品的符合性。

SQL:2003及以上版本

在21世纪,SQL标准定期更新。

SQL:2003标准于2004年3月1日发布。它的主要新增功能是窗口函数,这是一个强大的分析特性,允许您在不折叠行的情况下计算汇总统计信息。窗口函数极大地增强了SQL的表达能力。它们在准备各种商业报告、分析时间序列数据和分析趋势方面非常有用。在标准中添加窗口功能与OLAP和数据仓库的流行相一致。人们开始使用数据库来进行数据驱动的商业决策。由于所有企业收集的数据越来越多,这一趋势只会越来越强劲。


http://chatgpt.dhexx.cn/article/IQRuVMwx.shtml

相关文章

SQL语法基础篇 —— 常用的SQL标准

常用的SQL标准 SQL有两个主要的标准,分别是SQL92和SQL99。92和99代表了标准提出的时间,SQL92就是92年提出的标准规范。除了SQL92和SQL99以外,还有其他的标准。 最重要的SQL标准就是SQL92和SQL99。一般来说SQL92的形式更简单,但是…

mysql多表查询(一口气解决掉:自连接 左右连接 满连接等)

多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,…

【第一章】SQL基础知识

目录 ​编辑 1. 认识SQL 1.1 SQL的标准 1.2 SQL的种类 1.3 SQL的功能 2. 常量 2.1 数字常量 2.2 字符串常量 2.3 日期和时间常量 2.4 符号常量 3. 变量 3.1 局部变量 3.2 全局变量 4. 运算符 4.1 算术运算符 4.2 比较运算符 4.3 逻辑运算符 4.4 按位运算符 …

C# WinForm中NotifyICon控件的用法【1】

任务栏中的图标是一些进程的快捷方式,这些进程在计算机后台运行,如防病毒程序或音量控制。 平时我们在使用QQ的时候,QQ主界面隐藏到系统托盘里,需要调用的时候在点击出来,很好很强大。 那么我们在C#中如何实现呢。本…

notify() notifyAll() 区别

notify 参考:https://blog.csdn.net/weixin_44121696/article/details/109306019 public class ObjectTest {public static void main(String[] args) {Object objectLock new Object();new Thread(() -> {synchronized (objectLock) {System.out.println(Thre…

NotifyIcon的属性、事件、方法

参考文章: NotifyIcon控件的使用. 属性 属性名操作博主翻译ContextMenuStrip可绑定ContextMenuStrip控件当用户右击该图标,显示的快捷菜单Icon必须选择一个ico格式的图片,否则右下角任务栏不会出现对象的可见性级别。所有属性都适用 事件 1.鼠标双击…

notify和notifyAll

notify: notify只会唤醒众多等待线程中的其中一个线程 用包子铺案例来演示一下 package com.thread;/*** author 邓亚非*/ public class TestNotify {private static Object objectnew Object();public static void main(String[] args) {// 顾客1线程new Thread(new …

notify和notifyall的区别

文章目录 场景分析例子经典java线程状态流转图 场景 调用wait的线程的唤醒,一般通过notify和notifyAll,但是两者之间有什么区别呢? 分析 线程调用synchronized方法或者synchronized代码块需要获取对象锁,如果没有获取则进入锁池线程调用wa…

Winform从入门到精通(14)——NotifyIcon(史上最全)

文章目录 前言:一、属性1、BalloonTipIcon1.1 ToolTipIcon.Error1.2 ToolTipIcon.Info1.3 ToolTipIcon.Warning1.4 ToolTipIcon.None2、BalloonTipText3、BalloonTipTitle4、Icon4.1 界面设置icon属性4.2 代码设置Icon属性5、Tag6、Text7、Visible

WPF利用NotifyIcon创建任务栏图标(菜鸟教程)

学习目标: 记录从WPF应用创建开始,一步步到任务栏图标创建的全过程。 流程: 1、环境:Win10 VS2017 打开VS2017,选择文件 -> 新建 -> 项目 -> Visual C# -> Windows桌面 ->WPF应用 -> 更改项目名为…

Notify

1 有什么用 作用 : 解耦,异步,并行 举个栗子 假设我们有这么一个应用场景,为了完成一个用户注册淘宝的操作,可能需要将用户信息写入到用户库中,然后通知给红包中心给用户发新手红包,然后还需…

NotifyICon使用

2010-04-11 15:47 by Ju2ender, 1438 visits, 网摘, 收藏, 编辑 最常见使用NotifyIcon的程序就是QQ了,当初我很好奇这通知区域的小企鹅是如何随着QQ的运行放上去的,这的确是个有趣的技巧。 要是用到自己的程序上的确显得很专业!我们来为自己的…

notifyIcon 用法

BalloonTipIcon —— 气泡提示的类型,有None(无)、Info(蓝色感叹号)、Warnning(黄色感叹号)、Error(小红叉) BalloonTipText —— 气泡提示的内容,如上图的N…

C#如何使用NotifyIcon实现任务栏托盘菜单及气泡提示

以软件【银行业会计人员技能训练系统】为例,如何使用NotifyIcon实现任务栏托盘菜单及气泡提示? 实现系统托盘方法如下: 1、向窗体中添加NotifyIcon控件和ContextMenuStrip控件; 2、为ContextMenuStrip控件添加子项; 3…

C#——NotifyICON的使用

1、作用(给程序增加下方提示图标) 2、实现方式 1)添加NotifyIcon控件,属性中Visible设为true 2)选择要显示的图标(icon格式),此时已经可以显示小图标,但右击不会显示小菜单栏. 3、添加ContextMenuStrip控…

【学习笔记】C# 动态系统托盘图标的实现 - NotifyIcon控件

操作步骤: 1、创建一个C# Windows窗体应用项目,命名为“IconTwinkle”: 2、双击解决方案中的“Resources.resx”,点击“添加资源”,选择图标并导入: 3、可见选定的图标已导入项目中: 4、双击右…

Android开发之PreferenceActivity和PreferenceFragment

在PreferenceActivity中,给我们提供了四个选项集成控件:ListPreference,EditTextPreference,CheckBoxPreference和RingtonePreference。 注意: 通过PreferenceActivity生成的XML文件,命名方式是定死了的&…

设置PreferenceFragment主题

整个项目主题颜色暗色,在使用PreferenceFragmentCompat文字也是黑色的导致看不清楚,采取更改PreferenceFragmentCompat主题实现,效果如下: 查看PreferenceFragmentCompat源码看到onCreate开始设置Theme,先获取preferen…

PreferenceFragment和PreferenceActivity

提要:PreferenceFragment展示中设置的值可以通过PreferenceManager.getDefaultSharedPreferences(context).来实现 【正文】 一、PreferenceFragment的引入: PreferenceActivity是一个非常有用的基类,当我们开发Android项目时避免不了选项设置…

彻底变换PreferenceFragment样式和全局设置字体样式的解决方案

一、PreferenceFragment样式修改 新样式 直接上图,原样式为白色样式,即为PreferenceFragment的默认样式: ① 白底黑字;② SwitchPreference开关默认为蓝色; ③ ListPreference列表默认为白色,选中状…