ScholarGate
助手

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转换为类似代数的表达式,并应用等价规则来寻找高效的计划。理解代数可以解释为什么某些查询重写是有效的,并有助于推断查询等价性和成本。

Methods for this concept

Related concepts