关系代数到底怎么学?并差笛卡尔积、选择投影、自然连接与除法运算底层原理,软考数据库系统工程师必考考点一篇讲透

分类: 数据库系统工程师 发表时间:2026年08月16日 00:17 修改时间:2026年11月09日 23:59 阅读量:1

关系代数到底怎么学?并差笛卡尔积、选择投影、自然连接与除法运算底层原理,软考数据库系统工程师必考考点一篇讲透

一、概念定义:关系代数是一套对关系做集合变换的运算体系

关系代数(Relational Algebra)是一种过程化的查询语言,它把关系作为运算的基本对象,通过一组关系运算符的层层叠加来表达查询需求,运算的输入是关系,运算的输出仍然是关系。这一定义源自关系数据库理论的奠基人埃德加·科德(E. F. Codd)于一九七零年提出的关系模型。在科德的理论体系里,关系代数与关系演算(Relational Calculus)共同构成了关系数据查询语言的数学基础,前者说明"怎么做",是过程化的,后者说明"要什么",是非过程化的。而今天无处不在的结构化查询语言 SQL,正是介于两者之间、同时吸收二者思想的工业标准。

在软考《数据库系统工程师》和《软件设计师》的考试大纲中,关系代数是数据库章节不可回避的核心考点。考生需要掌握的不是某个具体数据库产品的语法细节,而是这组运算背后的集合论语义。关系代数的每一步运算,本质上都是对元组集合做一次变换,理解了这一点,就能把看似繁多的运算符号统一到同一条思维主线上。

这里必须先厘清"关系"一词的严格含义。关系(Relation)是笛卡尔积的一个有限子集,从直观上看就是一张二维表;元组(Tuple)是表中的一行;属性(Attribute)是表中的一列,属性的取值来自相应的域(Domain)。关系有三个核心性质,它们直接决定了关系代数运算的许多规则。其一,元组在关系中的排列是无序的,即调换两行的位置仍是同一个关系。其二,属性在理论上也是无序的,虽然工程实践中为了书写方便通常约定一个属性顺序。其三,关系中不允许出现完全相同的两个元组,关系是"无重复元组的集合"。正是这第三条性质,决定了投影运算必须自动去重,也决定了关系代数区别于普通表格处理工具的独特之处。

理解了关系是"元组的集合"这一本质,关系代数的全部运算都可以被统一理解为:要么是在集合层面做传统的并、交、差、笛卡尔积,要么是在关系特有的行列结构上做选择、投影、连接、除法。前者被称为传统的集合运算,后者被称为专门的关系运算,两者共同构成关系代数的完整运算体系。

与关系代数并列的另一个理论体系是关系演算。关系演算以数理逻辑中的谓词演算为基础,用谓词公式来描述查询目标,属于非过程化语言,用户只需说明"要什么"而不必说明"怎么做"。关系演算又分为元组关系演算和域关系演算两大类。元组关系演算以元组变量为基本对象,其典型代表是二十世纪七十年代提出的 ALPHA 语言;域关系演算以域变量为基本对象,其典型代表是表格化的按例查询 QBE 语言。关系代数与两类关系演算在表达能力上是等价的,这一等价性由关系数据库理论严格证明,也正是 SQL 能够被翻译为关系代数执行计划的根本原因。软考中虽然以关系代数为主,但偶尔也会考察关系演算的基本概念,考生应对三者的对应关系建立整体认识。

二、原理机制:每一类运算背后的集合论本质

集合运算的本质:以元组为元素的集合论操作

传统集合运算中的并、交、差,直接脱胎于数学上的集合论。并运算把两个关系的元组合并在一起并消除重复元组;交运算取出两个关系共有的元组;差运算保留属于前一个关系但不属于后一个关系的元组。这三者能够成立有一个严格前提,就是两个关系必须"并相容"(Union-Compatible),即它们的属性个数相同,且对应属性的域也相同。通俗地说,就是两张表的列数一致、每列的语义和取值范围也一致,否则把毫无关联的两组元组做并交差就没有任何意义。

广义笛卡尔积则是一个更容易被忽视却极其重要的运算。关系 R 有 m 个元组、关系 S 有 n 个元组,那么 R 与 S 的笛卡尔积就得到 m 乘以 n 个元组,每个结果元组由 R 的一个元组和 S 的一个元组前后拼接而成。笛卡尔积的结果往往庞大且多数元组没有业务意义,但它却是所有连接运算的构造基石,这一点在后续的连接部分会详细展开。

选择与投影:水平切割与垂直切割

选择运算用符号西格玛表示,记为σ_F(R),其含义是从关系 R 中挑出满足条件 F 的那些元组,条件 F 是由比较运算符和逻辑运算符组合而成的布尔表达式。选择运算作用在行上,是对关系做水平方向的切割,结果关系的属性与 R 完全相同,只是元组数量变少了。选择运算的语义可以精确描述为:σ_F(R) 等于所有满足"t 属于 R 且 F(t) 为真"的元组 t 的集合。

选择运算中的条件 F 是由若干比较表达式通过逻辑运算符组合而成的。比较表达式形如"属性名 比较符 属性名"或"属性名 比较符 常量",比较符包括大于、小于、等于、大于等于、小于等于、不等于;逻辑运算符包括逻辑与、逻辑或、逻辑非。在条件中使用属性名时,通常用关系名加属性名或纯属性名的形式来限定,以避免多关系连接时出现属性名歧义。正是这种对条件的精确刻画,使得选择运算能够表达任意复杂的行筛选逻辑,也使得它能够与投影、连接自由组合,构造出表达能力极强的关系代数表达式。

关系代数表达式一旦书写出来,就可以被表示成一棵查询树,其中叶子节点是参与运算的原始关系,内部节点是各类关系运算符,从叶子向上逐层计算直到根节点。数据库的查询优化器正是基于这棵查询树来工作的,它通过代数等价变换改写树的形状,把选择、投影尽量下推到叶子附近,把笛卡尔积与选择合并为连接,从而减少每一层中间结果的数据量。理解了查询树,考生就能直观地把握"关系代数为什么是 SQL 的数学基础":SQL 语句经过解析后生成的正是关系代数表达式,再转换为查询树交给优化器执行。

投影运算用符号派表示,记为π_A(R),其中 A 是 R 的一个属性子集。投影的作用是只保留指定的属性列,是对关系做垂直方向的切割。投影运算有一个极易被忽略却非常关键的行为,那就是它会自动消除重复元组。因为在关系模型中关系不允许有重复元组,当投影去掉某些列之后,原本靠被删列来区分的两行可能变成完全相同的一行,此时必须合并为一行。这一去重行为,是投影运算区别于 SQL 中普通 SELECT 列清单的重要之处,也是软考选择题的常见陷阱。

连接运算:笛卡尔积加选择条件的复合

连接运算是关系代数中最复杂也最实用的一类运算,它本质上可以看作"先做笛卡尔积、再做选择"的复合运算。给定关系 R 和 S,先把二者做笛卡尔积得到一个庞大的中间结果,再从其中挑选出满足连接条件的元组,这个过程就是条件连接,也叫西塔连接。当连接条件取等号时,就退化为等值连接;当连接条件为空、等价于笛卡尔积本身时,就是广义笛卡尔积。

自然连接(Natural Join)是等值连接的一个特例,也是最常用的连接。它要求两个关系拥有共同的属性列,在此基础上做两件事:第一,在公共属性上做等值匹配;第二,把重复的公共属性列去掉,只保留一份。自然连接的结果属性个数等于两个关系属性个数之和减去公共属性个数。自然连接的这种"自动去重公共列"行为,正是它与普通等值连接最本质的区别,也是真题中反复考察属性个数计算的关键所在。

三、分类与应用:运算全景与边界条件

传统集合运算五兄弟

关系代数的运算从大的分类上可以归纳为五种基本运算和若干派生运算。五种基本运算分别是并、差、广义笛卡尔积、选择、投影。之所以称这五个为"基本",是因为其余运算都可以由它们组合导出。例如,交运算可以用差运算表达,R 交 S 等于 R 减去(R 减去 S);连接运算可以用笛卡尔积加选择表达;除法运算也可以由投影、笛卡尔积、差运算一步步构造出来。掌握这五个基本运算,就等于掌握了关系代数的全部表达能力。

并运算要求两个关系并相容,结果取两个关系元组的并集,消除重复。交运算同样要求并相容,结果取两个关系元组的交集。差运算要求并相容,结果取属于前者但不属于后者的元组,需要注意差运算不满足交换律,R 减 S 与 S 减 R 是两个不同的结果。笛卡尔积对两个关系没有并相容的要求,任意两个关系都可以做笛卡尔积,其结果属性个数为两关系属性个数之和,元组个数为两关系元组个数之积。

专门关系运算的边界条件

选择运算、投影运算是单目运算,只作用于一个关系;连接、除法是二目运算,作用于两个关系。选择的结果属性与输入完全一致,只是元组减少;投影的结果元组个数不会超过输入,但由于去重,可能大幅减少;连接的结果既可能增加属性(去掉公共列后仍多于单个关系),也可能减少元组(只保留满足条件的组合)。

把关系代数映射到 SQL 语法,是理解两者关系的最快路径。选择运算对应 WHERE 子句中的筛选条件,投影对应 SELECT 关键字后列出的属性清单,笛卡尔积对应 FROM 子句中用逗号并列的多张表,条件连接对应带 ON 条件的 JOIN,等值连接对应 ON 条件取等号的 JOIN,自然连接对应 NATURAL JOIN,左外连接对应 LEFT JOIN,右外连接对应 RIGHT JOIN,全外连接对应 FULL J

本篇完!

请输入阅读码
你可能也喜欢这些文章
 

软考系统分析师Armstrong公理系统详解:自反律增广律传递律怎么推导函数依赖闭包
07-01
软考端口扫描技术到底怎么考?FIN扫描目标主机不回复就是端口开放,SYN半开扫描与TCP三次握手底层原理一篇讲透
10-19
《论云原生架构及其应用》适合写什么项目?
10-13
网络规划师必知QoS三大模型,DiffServ凭什么赢?
07-31
《论软件体系结构的演化》审题技巧
12-28
操作系统中断处理与系统调用核心机制详解
07-19
软考指令寻址方式怎么学?立即直接间接寄存器变址基址相对八大寻址,地址计算与真题陷阱一篇讲透
10-15
软考白盒测试逻辑覆盖怎么考?语句判定条件路径六大覆盖标准强弱排序与用例数计算一篇讲透
08-29
44.1kHz采样率怎么来的?数字音频量化与数据率计算全解析
07-25
软考论文《论数据访问层设计技术及其应用》精选试读
12-06
软考数据库完整性约束怎么学?实体完整性、参照完整性与用户定义完整性三类约束底层原理与真题陷阱一篇讲透
09-06
系统架构设计师必考:软件体系结构演化分类原则与常见命题陷阱全解析
07-08
《论数据挖掘方法及应用》写作心得
02-16
2025软考系统架构人工智能专项练习题,独家资料!
11-02
《论信息系统项目的绩效管理》高分秘籍
10-25
一次数据丢失让公司赔了200万,3种备份策略你选对了吗
07-28