知识卡片

SELECT-FROM-WHERE的概念语义:积→限制→投影三步模型

结构图卡

内容

SQL标准SELECT-FROM-WHERE表达式的概念语义(不代表实现必须真的按这个顺序执行, 只是”结果必须等价于按这个顺序计算”的形式化定义)分三步:先计算FROM子句,产生 所涉及表的积;再计算WHERE子句,对这个积做限制;最后计算SELECT子句,对限制的 结果做”投影”(打引号是因为不加DISTINCT时它不消除重复,不是真正的关系投影)。 这个三步模型直接解释了θ-连接(θ表示任意标量比较符)为什么不是基本运算符—— 它就是”对积做限制”这个组合的简写:θ为”=“时得到等值连接(equijoin),θ为”≠” 时得到不等值连接。这个概念算法同时也精确定义了优化器的职责边界:实现可以用 任何算法计算这个表达式,只要它能证明自己的算法在逻辑上等价于这个”积→限制→ 投影”的概念算法即可——书中把优化器的工作干脆重新表述为”找到一个可证明等价于 概念算法、但性能更优的算法”,这条定义直接引出下一节讨论的表达式变换主题。

结构图

flowchart LR
    A[FROM子句] -->|计算得到| B[表的积 product]
    B -->|WHERE子句做限制| C[满足条件的元组]
    C -->|SELECT子句做投影/重命名| D["最终结果<br/>(不加DISTINCT则非真投影)"]

参考来源

- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第6章"SQL和关系代数 I:原始运算符"6.10节"计算SQL表表达式"(源文件:OEBPS/text00069.html) - 结论依据:原文明确"θ-连接并不是基本的;事实上,它定义为对积的限制……FROM 子句对应于积,WHERE子句对应于限制,SELECT子句对应于投影。因此,SELECT- FROM-WHERE表达式整体表示对积的限制的投影……实现只有在满足下面要求的前提下 才能自主其事:实现可以证明其所用算法逻辑等价于概念算法"。 - 原始内容:FROM子句对应于积,WHERE子句对应于限制,SELECT子句对应于投影。 因此,SELECT-FROM-WHERE表达式整体表示对积的限制的投影……描述优化器职责的 一种方式就是,将其描述为"找到一个肯定等价于概念算法但性能更优的算法"。