1. 起源背景
SQL 的诞生源于 1970 年代早期对关系型数据库的探索。E. F. Codd 在 1970 年发表的《A Relational Model of Data for Large Shared Data Banks》提出了关系模型,认为数据应当用表格形式表示,并通过数学集合运算进行查询。
传统的文件系统和早期数据库通常依赖程序代码把数据从磁盘读入内存,再逐条处理。这种方式存在两类问题:
- 数据与程序紧耦合,应用程序需要了解数据存储细节;
- 查询逻辑难以重用,开发复杂、维护成本高。
关系模型提出:
- 以**表(relation)**为抽象数据结构;
- 以集合操作和谓词过滤为核心查询方式;
- 让系统负责存储访问、优化执行,用户只需描述“想要什么”。
2. SQL 的目标
SQL 的设计目标是解决关系模型在实际使用中的两个核心问题:
- 数据独立性:让用户不必关心物理存储、索引结构、文件组织方式;
- 声明式查询:允许用户描述结果而不是执行步骤,让数据库系统负责最优执行计划。
同时,SQL 还要满足以下需求:
- 支持结构化数据的定义、修改和控制;
- 支持复杂的查询、连接、聚合、分组、排序;
- 支持事务、并发和数据完整性;
- 支持多用户共享访问和安全控制。
3. 为什么要有 SQL
从问题角度讲,SQL 出现是因为需要一种统一、可移植、易用的方式来访问关系型数据:
- 应用程序不应该直接写磁盘访问代码;
- 查询应该像“向数据库提问”而不是像“写一段遍历算法”;
- 数据模型应该与程序语言分离,以便结构可以演进而不破坏旧应用;
- 数据库系统应当承担优化工作,使同一条查询在不同环境下都能高效执行。
因此 SQL 不是为了写程序,而是为了表达数据需求。
4. SQL 解决了什么问题
4.1 抽象存储与访问
SQL 通过关系模型和表结构把数据抽象出来,屏蔽底层存储细节。开发者只需定义模式、约束、视图,而不必管理记录格式与存储块。
4.2 简化查询表达
SQL 是声明式语言,用户只需描述查询结果:
- SELECT 指定列;
- FROM 指定数据来源;
- WHERE 指定筛选条件;
- GROUP BY/ORDER BY 构造聚合与排序。
这种范式让复杂查询看起来像“找到符合条件的数据集合”,而不是写循环、索引查找、连接算法。
4.3 共享与多用户
SQL 设计之初就是面向共享数据库系统,支持多个用户并发访问、权限控制、事务一致性。它将操作抽象成 DDL、DML、DCL 等类别,便于权限与一致性管理。
4.4 优化与可移植性
由于用户只写“想要什么”,而不是“怎么做”,数据库系统能够对查询进行优化。这种分离使得同一条 SQL 能够跨不同数据库管理系统运行,并且由系统选择最优执行计划。
5. SQL 的发展价值
SQL 的出现标志着数据库从“程序逻辑驱动的数据处理”转向“数据驱动的声明式访问”。它解决了:
- 数据与程序的耦合问题;
- 查询可重用与可维护性问题;
- 多用户共享和事务一致性问题;
- 自动优化与可移植性问题。
因此,SQL 之所以存在,是为了让数据访问变成“描述性查询”,并让数据库系统负责底层执行。