↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.1 / 7.0 / 6.5
历史版本PostgreSQL 7.0 已于 2005 年 5 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

第 69 章 SQL

摘要

本章介绍关系数据库背后的数学概念。这不是必读内容,所以如果你觉得 陷入困境,或者想直接看一些简单的例子,尽管跳到下一章,等有了更多 时间和耐心时再回来。这些内容本来就应该是有趣的!

这些材料最初是 Stefan Simkovics 的硕士论文 ( Simkovics, 1998 )的一部分。

SQL 已成为最流行的关系查询语言。名称 "SQL" 是 Structured Query Language(结构化查询语言)的缩写。1974 年,Donald Chamberlin 等人在 IBM 研究院定义了语言 SEQUEL(Structured English Query Language,结构化英语查询语言)。该语言于 1974-75 年首次在一个名为 SEQUEL-XRM 的 IBM 原型中实现。1976-77 年定义了修订版 SEQUEL,称为 SEQUEL/2,随后名称改为 SQL。

1977 年,IBM 开发了一个名为 System R 的新原型。System R 实现了 SEQUEL/2(即现在的 SQL)的一个很大的子集,并且在 项目期间对 SQL 做了大量修改。System R 被安装在许多 用户站点,既有 IBM 内部站点,也有一些选定的客户站点。得益于 System R 在这些用户站点的成功和认可,IBM 开始基于 System R 技术开发实现 SQL 语言的商业产品。

在随后的几年里,IBM 以及其他许多厂商都发布了 SQL 产品,例如 SQL/DS(IBM)、 DB2(IBM)、ORACLE (Oracle Corp.)、DG/SQL (Data General Corp.) 和 SYBASE(Sybase Inc.)。

SQL 如今也是一个官方标准。1982 年,美国国家 标准协会(ANSI)授权其数据库委员会 X3H2 制定标准关系语言的提案。该提案于 1986 年获得批准,本质上由 SQL 的 IBM 方言构成。1987 年,这一 ANSI 标准又被国际标准化组织(ISO)接受为国际标准。这一最初的标准版本的 SQL 常被非正式地称为 "SQL/86"。1989 年,原始标准得到扩展,这一新标准同样常被非正式地称为 "SQL/89"。同样在 1989 年,还制定了一个相关标准,称为 Database Language Embedded SQL(ESQL,数据库语言嵌入式 SQL)。

ISO 和 ANSI 委员会多年来一直在定义一个大幅扩展的原始标准版本,它被非正式地称为 SQL2 或 SQL/92。该版本于 1992 年底成为批准的标准——"International Standard ISO/IEC 9075:1992, Database Language SQL"。当人们提到"the SQL standard"(SQL 标准)时,通常指的就是 SQL/92。SQL/92 的详细描述见 Date and Darwen, 1997 。在撰写本文时,一个被非正式地称为 SQL3 的新标准正在制定中。计划让 SQL 成为图灵完备的语言,即所有可计算的查询(例如递归查询)都将成为可能。这是一项非常复杂的任务,因此新标准的完成不会早于 1999 年。

69.1. 关系数据模型 #

如前所述,SQL 是一种关系语言。也就是说,它基于 E.F. Codd 于 1970 年首次发表的关系数据模型。 我们稍后(在关系数据模型的形式化定义中) 给出关系模型的形式化描述,但首先我们想从更直观的角度看一看它。

关系数据库是这样一种数据库:在它的用户看来,它是 一个表的集合(而且除了表之外没有别的东西)。 表由行和列组成,每一行代表一条记录,每一列代表表中记录的一个属性。 供应商与零件数据库展示了一个由三张表 组成的数据库示例:

  • SUPPLIER 是一张存储供应商编号(SNO)、名称(SNAME)和所在城市 (CITY)的表。

  • PART 是一张存储零件编号(PNO)、名称(PNAME)和价格(PRICE)的表。

  • SELLS 存储哪个供应商(SNO)销售哪个零件(PNO)的信息。 在某种意义上,它起着把另外两张表连接起来的作用。

例 69.1. 供应商与零件数据库

SUPPLIER:                   SELLS:
 SNO |  SNAME  |  CITY       SNO | PNO
----+---------+--------     -----+-----
 1  |  Smith  | London        1  |  1
 2  |  Jones  | Paris         1  |  2
 3  |  Adams  | Vienna        2  |  4
 4  |  Blake  | Rome          3  |  1
                              3  |  3
                              4  |  2
PART:                         4  |  3
 PNO |  PNAME  |  PRICE       4  |  4
----+---------+---------
 1  |  Screw  |   10
 2  |  Nut    |    8
 3  |  Bolt   |   15
 4  |  Cam    |   25
     


表 PART 和 SUPPLIER 可以看作实体,而 SELLS 可以看作特定零件与特定供应商之间的联系。

正如我们稍后将看到的,SQL 就是在刚才定义的这类表上 操作的,但在此之前,我们先学习关系模型的理论。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。