SQL和关系代数
关系代数是一种对关系进行操作的过程语言,它赋予关系模型形式语义,而SQL是标准的声明性语言,数据库系统将其编译成类似代数的执行计划。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
关系代数是一组运算符,它们以关系作为输入并产生关系作为输出;SQL(结构化查询语言)是ISO标准声明性语言,用于定义、查询和更新关系数据库,其查询语义与扩展了分组、聚合和包语义的关系代数密切对应。
Scope
本主题涵盖关系代数的运算符——选择、投影、笛卡尔积、连接、并、差和重命名——以及它们作为查询和查询优化形式基础的用途。它涵盖了SQL的核心:SELECT-FROM-WHERE查询、连接、分组和聚合、子查询、集合操作以及数据定义和数据操作语句,以及SQL的多重集语义和用于空值的三值逻辑。它不包括查询的物理执行和优化方式(这在查询处理和优化中涵盖)。
Core questions
- 关系代数的原始运算符和派生运算符有哪些?
- SQL的SELECT-FROM-WHERE查询如何映射到关系代数操作?
- 分组和聚合如何扩展基本代数?
- 空值和三值逻辑如何影响查询结果?
- 为什么SQL使用多重集(包)而不是集合语义?
Key concepts
- 选择、投影、连接
- 并、差、笛卡尔积
- SELECT-FROM-WHERE
- 分组和聚合
- 子查询和关联
- 集合和多重集操作
- 三值逻辑和空值
- 数据定义和操作语言
Key theories
- 关系代数运算符
- 选择、投影、并、集合差、笛卡尔积和重命名构成了一个完整的集合,连接、交和除法从中派生;它们之间的代数恒等式证明了查询重写优化的合理性。
- 声明式查询和关系完备性
- SQL允许用户声明他们想要什么数据,而不是如何获取数据;因为它能够表达每个关系代数查询(以及更多),所以它是关系完备的,系统可以自由选择高效的执行策略。
- 空值的三值逻辑
- SQL评估真、假和未知条件以处理空值;这会影响比较、WHERE过滤和聚合,并且是导致细微查询错误的常见原因。
Clinical relevance
SQL是计算机领域使用最广泛的语言之一:它是几乎所有为业务应用程序、分析和网络服务提供支持的关系数据库的接口,而关系代数是查询优化器用来高效重写和规划这些SQL查询的理论工具。
History
Codd在1970年的论文中引入了关系代数和关系演算。在IBM的System R项目中,Chamberlin和Boyce设计了SEQUEL(1974),后来更名为SQL,作为一种更易于使用的声明性语言。SQL从1986年开始由ANSI和ISO标准化,并通过后续标准进行了扩展,同时仍以关系代数为基础。
Key figures
- Edgar F. Codd
- Donald D. Chamberlin
- Raymond F. Boyce
Related topics
Seminal works
- codd1970
- chamberlin1974
- garciamolina2008
Frequently asked questions
- SQL与关系代数完全相同吗?
- 不完全相同。SQL基于关系代数和关系演算,但在关键方面有所不同:它使用多重集(包)语义,因此可以出现重复项;增加了分组和聚合;支持带有三值逻辑的空值;并包含纯代数所缺乏的过程和数据定义功能。
- 如果实际中使用的是SQL,为什么还要学习关系代数?
- 关系代数是查询优化背后的形式模型:数据库系统将SQL转换为类似代数的表达式,并应用等价规则来寻找高效的计划。理解代数可以解释为什么某些查询重写是有效的,并有助于推断查询等价性和成本。