【数据基础课】SQL的发展史简述

本文旨在介绍 SQL 的发展历史,重点关注 SQL 与关系型数据库之间的密切关系,并深入分析不同 SQL 标准的核心功能。

我们将追溯 SQL 的起源,了解其在关系型数据库管理系统(RDBMS)中的作用,并探讨各种 SQL 标准的关键特性和演变。

SQL 的起源与关系型数据库

SQL(Structured Query Language,结构化查询语言)并非一开始就存在的。它的诞生与关系型数据库模型的兴起密不可分。20 世纪 70 年代初,IBM 的研究员 Edgar F. Codd 提出了关系型数据库模型,这是一种基于关系代数和谓词逻辑的数据模型。Codd 的模型旨在提供一种更简洁、更一致的方式来组织和管理数据,取代当时流行的层次型和网络型数据库。

英文原文地址 《A Relational Model of Data for Large Shared Data Banks》

为了能够有效地操作和查询关系型数据库,需要一种专门的语言。这就是 SQL 诞生的背景。最初,IBM 开发了一种名为 SEQUEL(Structured English Query Language)的语言,作为 System R 项目的一部分。System R 是 IBM 早期的一个关系型数据库原型系统。后来,由于商标问题,SEQUEL 被更名为 SQL。

SQL 的设计目标是提供一种易于理解和使用的语言,允许用户以声明式的方式描述他们想要检索的数据,而无需指定具体的访问路径或算法。这与之前的数据库语言形成了鲜明对比,之前的语言通常需要用户编写复杂的程序来遍历数据结构。

SQL 与关系型数据库的关系

SQL 与关系型数据库的关系是密不可分的。SQL 是关系型数据库的标准查询语言,几乎所有的 RDBMS 都支持 SQL。关系型数据库提供了一个结构化的环境来存储和管理数据,而 SQL 则提供了一种强大的工具来访问、操作和管理这些数据。

具体来说,SQL 在关系型数据库中扮演着以下关键角色:

  • 数据定义 (DDL): SQL 允许用户定义数据库的结构,包括创建、修改和删除数据库、表、索引等。例如,CREATE TABLE 语句用于创建新的表,ALTER TABLE 语句用于修改现有表的结构。
  • 数据操作 (DML): SQL 允许用户对数据库中的数据进行操作,包括插入、更新和删除数据。例如,INSERT INTO 语句用于插入新的数据行,UPDATE 语句用于更新现有数据行,DELETE FROM 语句用于删除数据行。
  • 数据查询 (DQL): SQL 允许用户从数据库中检索数据。SELECT 语句是 SQL 中最常用的语句,用于指定要检索的列、表以及过滤条件。
  • 数据控制 (DCL): SQL 允许用户控制对数据库的访问权限,包括授权和撤销用户的权限。例如,GRANT 语句用于授予用户特定的权限,REVOKE 语句用于撤销用户的权限。
  • 事务控制 (TCL): SQL 允许用户管理数据库事务,确保数据的一致性和完整性。例如,BEGIN TRANSACTION 语句用于开始一个新的事务,COMMIT 语句用于提交事务,ROLLBACK 语句用于回滚事务。

SQL 标准的发展

随着关系型数据库的普及,需要一个统一的 SQL 标准,以确保不同 RDBMS 之间的互操作性。美国国家标准协会(ANSI)和国际标准化组织(ISO)共同制定了 SQL 标准。

以下是一些重要的 SQL 标准及其核心功能:

  • SQL-86 (SQL1): 这是第一个 SQL 标准,定义了基本的 SQL 语法和功能,包括 SELECTINSERTUPDATEDELETE 等语句,以及基本的数据类型和运算符。
  • SQL-92 (SQL2): 这是对 SQL-86 的重大改进,引入了许多新的功能,包括:
    • 连接 (JOIN): 允许用户从多个表中检索相关的数据。
    • 子查询 (Subquery): 允许用户在一个查询中嵌套另一个查询。
    • 集合操作 (Set Operations): 允许用户对查询结果进行集合运算,如 UNIONINTERSECT 和 EXCEPT
    • 约束 (Constraints): 允许用户定义数据的完整性约束,如主键约束、外键约束和唯一约束。
  • SQL:1999 (SQL3): 引入了更多高级功能,包括:
    • 触发器 (Triggers): 允许用户定义在特定事件发生时自动执行的代码块。
    • 存储过程 (Stored Procedures): 允许用户将一系列 SQL 语句封装成一个可重用的模块。
    • 用户自定义类型 (User-Defined Types): 允许用户定义自己的数据类型。
    • 递归查询 (Recursive Queries): 允许用户查询具有层次结构的数据。
  • SQL:2003: 在 SQL:1999 的基础上进行了改进和扩展,包括:
    • XML 支持: 允许用户在数据库中存储和查询 XML 数据。
    • 窗口函数 (Window Functions): 允许用户在查询结果的窗口上执行计算。
    • 序列 (Sequences): 允许用户生成唯一的数字序列。

后续的 SQL 标准(如 SQL:2006、SQL:2008、SQL:2011 等)继续添加新的功能和改进,以满足不断变化的应用需求。

SQL 2006

  • INTERSECT 和 EXCEPT 集合运算符: 虽然这些运算符在以前的标准中已经存在,但 SQL:2006 澄清并标准化了它们的行为,确保了不同数据库系统之间的一致性。 INTERSECT 返回两个查询共有的行,而 EXCEPT 返回第一个查询中存在但第二个查询中不存在的行。
  • WITH 子句(公共表表达式 – CTE)的递归支持: SQL:2006 扩展了 WITH 子句以支持递归查询。 这允许查询处理分层数据,例如组织结构图或物料清单。
*   递归 CTE 允许查询引用自身,从而可以遍历分层数据。
  • MULTISET 数据类型: 引入了 MULTISET 数据类型,允许将值的集合存储在单个列中。 这对于表示一对多关系非常有用。

SQL 2008

SQL:2008 标准主要集中于改进 SQL:2006 中引入的功能,并添加了一些新的功能。 关键功能包括:

  • MERGE 语句: MERGE 语句允许在一个语句中执行 INSERTUPDATE 和 DELETE 操作。 这可以简化数据仓库应用程序中的常见任务,例如更新维度表。
  • 增强的排序规则支持: SQL:2008 改进了对排序规则的支持,允许指定用于比较字符串数据的排序规则。 这对于支持多种语言和字符集非常重要。
  • TRUNCATE TABLE 语句: TRUNCATE TABLE 语句允许快速删除表中的所有数据,而无需记录单个删除操作。 这比 DELETE 语句快得多,但不能回滚。增强的日期和时间数据类型: 改进了对时区和时间间隔的处理。

SQL:2011

SQL:2011 标准引入了许多新功能,旨在提高 SQL 的表达能力和安全性。 关键功能包括:

  • 时态数据支持: SQL:2011 引入了对时态数据的本机支持。 这包括新的数据类型(例如 PERIOD FOR)以及用于查询和操作时态数据的函数和运算符。 这使得数据库能够更有效地存储和处理历史数据,从而简化了与需要跟踪数据随时间变化情况的应用程序的集成。FETCH 子句: FETCH 子句允许限制查询返回的行数。 这对于分页结果非常有用。

* `FETCH FIRST n ROWS ONLY`:返回查询的前 n 行。

  • 增强的 CASE 表达式: SQL:2011 扩展了 CASE 表达式以支持更复杂的条件逻辑。
  • UNPIVOT 运算符: UNPIVOT 运算符允许将列转换为行。 这对于分析数据非常有用。
  • JSON 支持: 引入了对 JSON 数据的初步支持,为后续标准中更全面的 JSON 功能奠定了基础。

SQL 2016:

  • 增强的 JSON 支持: SQL:2016 及更高版本引入了对 JSON 数据的更全面的支持。 这包括新的数据类型(例如 JSON)以及用于查询和操作 JSON 数据的函数和运算符。
  • 行模式识别: 允许在数据流中搜索特定的模式。 这对于时间序列分析和事件处理非常有用。
  • STRING_AGG 函数: 允许将多行中的字符串连接成一个字符串。
  • LATERAL 派生表: 允许在 FROM 子句中引用同一查询中的先前表表达式。

结论

SQL 的发展历史与关系型数据库的演进紧密相连。

SQL 作为关系型数据库的标准查询语言,为用户提供了一种强大而灵活的方式来管理和操作数据。随着 SQL 标准的不断发展,SQL 的功能越来越强大,应用范围也越来越广泛。虽然不同的 RDBMS 在 SQL 的实现上可能存在一些差异,但 SQL 标准为数据库的互操作性奠定了基础。理解 SQL 的发展历史和核心功能,对于数据库开发人员和管理员来说至关重要。

2025/10/04