标准SQL

article/2025/11/6 0:35:59

       SQL是Structured Query Language的缩写,它的前身是著名的关系数据库原型系统System R所采用的SEQUEL语言。作为一种访问关系型数据库的标准语言,SQL自问世以来得到了广泛的应用,不仅是著名的大型商用数据库产品Oracle、DB2、Sybase、SQL Server支持它,很多开源的数据库产品如PostgreSQL、MySQL也支持它,甚至一些小型的产品如Access也支持SQL。近些年蓬勃发展的NoSQL系统最初是宣称不再需要SQL的,后来也不得不修正为Not Only SQL,来拥抱SQL。

  蓝色巨人IBM对关系数据库以及SQL语言的形成和规范化产生了重大的影响,第一个版本的SQL标准SQL86就是基于System R的手册而来的。可惜IBM起先并没有什么产品化的想法,倒是Oracle在1979年率先推出了支持SQL的商用产品。随着数据库技术和应用的发展,为各种不同的关系数据库系统提供一致的语言成了一种现实需要。

  对SQL标准影响最大的机构自然是那些著名的数据库产商,而具体的制订者则是一些非营利机构,例如国际标准化组织ISO、美国国家标准委员会ANSI等。各国通常会按照 ISO标准和ANSI标准(这两个机构的很多标准是差不多等同的)制定自己的国家标准。中国是ISO标准委员会的成员国,也经常翻译一些国际标准对应的中文版。标准为了避免采用具体产品的术语,往往会抽象出很多名词,从而增加了阅读和理解的难度,翻译成中文之后更容易词不达意。对于数据库系统实现者和用户而言,很多时候还不如直接读英文版本为好。虽然正式的标准不像RFC那样可以从网络上免费获得,标准草案还是比较容易找到的(例如:http://www.jtc1sc32.org/doc/)。待批准的标准草案和最终的标准也没有什么实质上的区别,能够满足日常工作的需要。

  下面是SQL发展的简要历史:

1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86 
1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-89 
1992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2) 
1999年,ISO/IEC 9075:1999,SQL:1999(SQL3) 
2003年,ISO/IEC 9075:2003,SQL:2003
2008年,ISO/IEC 9075:2008,SQL:2008
2011年,ISO/IEC 9075:2011,SQL:2011
2016年,ISO/IEC 9075:2016,SQL:2016

  细心的读者能发现,从SQL:1999开始,标准简称中的短横线(-)被换成了冒号(:),而且标准制定的年份也改用四位数字了。前一个修改的原因是ISO标准习惯上采用冒号,ANSI标准则一直采用短横线。后一个修改的原因是标准的命名也遇到了2000年问题。

  SQL86大概只有几十页,SQL92正文大约有500页,而SQL99则超过了1000页。可以看出,从SQL99开始,SQL标准的个头就非常庞大了,内容包罗万象,已经没有人能够掌握标准的所有内容了。

2016年12月14日,ISO/IEC发布了最新版本的数据库语言SQL标准(ISO/IEC 9075:2016)。从此,它替代了之前的ISO/IEC 9075:2011版本。

最新的标准分为9个部分:

ISO/IEC 9075-1 信息技术 – 数据库语言 – SQL – 第1部分:框架(SQL/框架)
ISO/IEC 9075-2 信息技术 – 数据库语言 – SQL – 第2部分:基本原则(SQL/基本原则)
ISO/IEC 9075-3 信息技术 – 数据库语言 – SQL – 第3部分:调用级接口(SQL/CLI)
ISO/IEC 9075-4 信息技术 – 数据库语言 – SQL – 第4部分:持久存储模块(SQL/PSM)
ISO/IEC 9075-9 信息技术 – 数据库语言 – SQL – 第9部分:外部数据管理(SQL/MED)
ISO/IEC 9075-10 信息技术 – 数据库语言 – SQL – 第10部分:对象语言绑定(SQL/OLB)
ISO/IEC 9075-11 信息技术 – 数据库语言 – SQL – 第11部分:信息与定义概要(SQL/Schemata)
ISO/IEC 9075-13 信息技术 – 数据库语言 – SQL – 第13部分:使用Java编程语言的SQL程序与类型(SQL/JRT)
ISO/IEC 9075-14 信息技术 – 数据库语言 – SQL – 第14部分:XML相关规范(SQL/XML)


SQL:2016中主要的新特性包括:

  • 行模式识别
  • 支持JSON对象
  • 多态表函数
  • 额外的分析功能


行模式识别(row pattern recognition)使用MATCH_RECOGNIZE子句指定一个匹配多行的模式(正则表达式),可以对这些匹配的行组进行过滤、分组和聚合操作。MATCH_RECOGNIZE支持两种形式:ONE ROW PER MATCH和ALL ROWS PER MATCH。ONE ROW PER MATCH对于每次匹配返回单行摘要,而ALL ROWS PER MATCH对于每次匹配中的每一行数据返回一行输出。行模式匹配可以用于分析时间序列数据,例如股票行情收录器日志或事件日志。

支持JSON对象
JSON对象由标签和数据组成。它为一些应用提供了极大的灵活性。SQL:2016提供了以下功能:

  • JSON对象的存储与检索
  • 将JSON对象表示成SQL数据
  • 将SQL数据表示成JSON对象
  • 添加JSON对象的SQL支持允许将JSON数据与已有的应用进行集成。这样可以提高安全性,集成数据库事务,并提高开发者效率。

多态表函数
表函数是指返回结果为一个表的函数,多态表函数(Polymorphic Table Functions, PTF)是一种用户定义的函数,可以在FROM子句中使用。它们可以处理在定义时没有声明行的类型的表,也可以生成一个在定义时声明了或者没有声明行的类型的结果表。多态表函数允许开发人员利用动态SQL创建强大而复杂的自定义函数。

额外的分析功能
SQL:2016增加了额外的分析功能,包括三角函数和对数函数。增加的三角函数包括sin、cos、tan、sinh、cosh、tanh、asin、acos以及atan。对数函数包括一般对数函数(log(<base>, <value>))、常用对数函数(log10(<value>))和自然对数函数(ln(<value>))。

这些分析函数支持在已有的SQL应用中进行复制的计算,同时可以为以后的多维数组提供支持。

 

负责具体制定工作的是ISO和IEC联合成立的一个技术委员会JTC1/SC32。正因为关系数据库市场非常成熟,竞争不够激烈,标准本身变得过于庞大等原因,SQL3制定的周期很长,制定期间也存在很多争议。例如文章《Is SQL a Real Standard Anymore?》对SQL标准化进程提出了置疑。

  如果要了解标准的内容,比较推荐的方法是泛读SQL92(因为它涉及了SQL最基础和最核心的一些内容),然后增量式的阅读其他标准。标准在每次更新的时候,委员会的成员们都为大家提供比较好的介绍文档。例如针对最新的SQL:2011,SIGMODRecord上就有很不错的介绍:http://www.sigmod.org/publications/sigmod-record/1203/pdfs/10.industry.zemke.pdf

  最后再简要介绍一下SQL标准的符合程度。绝大多数人提起SQL标准,涉及的内容其实是SQL92里头最基本或者说最核心的一部分。SQL92本身是分级的,包括入门级、过度级、中间级和完全级。为了验证具体的产品对标准的遵从程度,NIST还曾经专门发起了一个项目,来做标准符合程度的测试集合:http://itl.nist.gov/p897/ctg/sql_form.htm。不过,SQL标准包含的内容实在太多了,而且有很多特性对新的SQL产品而言也越来越不重要了。从SQL99之后,标准中符合程度的定义就不再分级,而是改成了核心兼容性和特性兼容性;也没有机构来推出权威的SQL标准符合程度的测试认证了。

以下附上SQL脑图:

 

 

 参考:

https://www.2cto.com/database/201412/360265.html?seluta=oyebw2

https://blog.csdn.net/horses/article/details/79851501


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

相关文章

SQL标准的历史

SQL标准已经存在30多年了&#xff0c;它改变了吗?绝对的!了解从SQL-86到现代SQL(当今的标准数据语言)的过程。 SQL是IBM在20世纪70年代由IBM公司创建的。1974年&#xff0c;Donald Chamberlin和Raymond Boyce发表了SEQUEL:《A Structured English Query Language》&#xff0…

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

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

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

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

【第一章】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】

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

notify() notifyAll() 区别

notify 参考&#xff1a;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控件当用户右击该图标&#xff0c;显示的快捷菜单Icon必须选择一个ico格式的图片&#xff0c;否则右下角任务栏不会出现对象的可见性级别。所有属性都适用 事件 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的线程的唤醒&#xff0c;一般通过notify和notifyAll,但是两者之间有什么区别呢&#xff1f; 分析 线程调用synchronized方法或者synchronized代码块需要获取对象锁&#xff0c;如果没有获取则进入锁池线程调用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创建任务栏图标(菜鸟教程)

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

Notify

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

NotifyICon使用

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

notifyIcon 用法

BalloonTipIcon —— 气泡提示的类型&#xff0c;有None&#xff08;无&#xff09;、Info&#xff08;蓝色感叹号&#xff09;、Warnning&#xff08;黄色感叹号&#xff09;、Error&#xff08;小红叉&#xff09; BalloonTipText —— 气泡提示的内容&#xff0c;如上图的N…

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

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

C#——NotifyICON的使用

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

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

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

Android开发之PreferenceActivity和PreferenceFragment

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

设置PreferenceFragment主题

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

PreferenceFragment和PreferenceActivity

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