软考软件设计师/系统架构设计师必考:关系代数(并、交、差、笛卡尔积、选择、投影、连接、除)最全详解
2026/9/24 10:02:45 网站建设 项目流程

目标:一文彻底掌握软考上午题中“关系代数”所有高频考点。包含并、交、差、笛卡尔积、选择、投影、连接、除八大运算的符号、定义、适用条件、计算方法与典型例题。配学生选课实例和软考风格练习题,看完这篇,无需再翻其他资料。


一、关系代数概述

关系代数是一种过程化查询语言,以关系为运算对象,通过对关系进行一系列运算得到查询结果。关系代数是SQL语言的理论基础,也是软考数据库部分必考内容。

1. 运算分类

  • 基本运算:并、差、笛卡尔积、选择、投影。
  • 导出运算:交、连接、除,可由基本运算组合得到。

2. 并相容性

并、交、差运算要求两个关系满足并相容

  • 具有相同的属性个数(元数相同)。
  • 对应属性的域相同(或可兼容)。

3. 常用符号

运算符号含义
R ∪ S两个关系的所有元组合并
R ∩ S两个关系中共有的元组
R − S在R中但不在S中的元组
笛卡尔积R × S两个关系元组的全组合
选择σ_条件®按条件筛选行
投影π_属性®选择指定列并去重
连接R ⋈_条件 S按条件连接两个关系
自然连接R ⋈ S按同名属性等值连接并去重列
R ÷ S求“包含所有”的元组

二、并、交、差

1. 并(Union)

定义:R ∪ S = { t | t ∈ R 或 t ∈ S }
要求:R和S并相容。
结果:包含R和S中的所有元组,重复元组只保留一个。

示例

R(A,B): (1,2), (2,3), (3,4) S(A,B): (1,2), (2,3), (4,5) R ∪ S = (1,2), (2,3), (3,4), (4,5)

2. 交(Intersection)

定义:R ∩ S = { t | t ∈ R 且 t ∈ S }
要求:R和S并相容。
结果:同时出现在R和S中的元组。

示例

R ∩ S = (1,2), (2,3)

3. 差(Difference)

定义:R − S = { t | t ∈ R 且 t ∉ S }
要求:R和S并相容。
结果:在R中出现但不在S中出现的元组。

示例

R − S = (3,4) S − R = (4,5)

软考常考:并、交、差要求并相容;差运算不满足交换律。


三、笛卡尔积(Cartesian Product)

定义:R × S = { t_R t_S | t_R ∈ R 且 t_S ∈ S }
结果属性:R的属性 + S的属性(若属性名冲突,需加前缀区分)。
结果元组数:|R| × |S|。

示例

R(A,B): (1,2), (2,3) S(C,D): (5,6), (7,8) R × S 结果属性为 (A,B,C,D),共4个元组: (1,2,5,6) (1,2,7,8) (2,3,5,6) (2,3,7,8)

软考常考:笛卡尔积结果元组数等于两个关系元组数之积;结果属性为两个关系属性之和。


四、选择与投影

1. 选择(Selection)

定义:σ_条件® = { t | t ∈ R 且 t 满足条件 }
作用:从关系中筛选出满足条件的(元组)。
条件:可用 =、≠、<、≤、>、≥ 及逻辑运算符 ∧、∨、¬。

示例

R(A,B): (1,2), (2,3), (3,4) σ_{A>1}(R) = (2,3), (3,4) σ_{A=2 ∧ B=3}(R) = (2,3)

2. 投影(Projection)

定义:π_属性列表® = { t[属性列表] | t ∈ R }
作用:从关系中选出指定的,并去除重复元组

示例

R(A,B): (1,2), (2,3), (3,4), (4,3) π_A(R) = (1), (2), (3), (4) π_B(R) = (2), (3), (4)

软考常考:选择是行运算,投影是列运算;投影结果自动去重。


五、连接(Join)

连接是将两个关系的元组按一定条件拼接成新元组。

1. θ连接(Theta Join)

定义:R ⋈_{条件} S = σ_{条件}(R × S)
条件:可以是 =、<、> 等比较运算。
结果:先做笛卡尔积,再按条件筛选。

示例

R(A,B): (1,2), (2,3) S(B,C): (2,5), (3,6), (4,7) R ⋈_{R.B < S.B} S 结果属性 (A,B,B,C),满足条件的元组: (1,2,3,6) // 2<3 (1,2,4,7) // 2<4 (2,3,4,7) // 3<4

2. 等值连接(Equi-Join)

定义:θ连接中条件为等号的情况。
示例:R ⋈_{R.B=S.B} S
结果保留两个B列。

3. 自然连接(Natural Join)

定义:R ⋈ S,按两个关系中所有同名属性进行等值连接,并去掉重复属性列。
要求:两个关系有同名属性。
示例

R(A,B): (1,2), (2,3), (3,4) S(B,C): (2,5), (3,6), (4,7) R ⋈ S = (1,2,5), (2,3,6), (3,4,7)

结果属性为 (A,B,C),B列只保留一个。

4. 连接类型对比

连接条件结果属性是否去重列
θ连接任意条件R属性+S属性
等值连接等号条件R属性+S属性
自然连接同名属性相等去掉重复列

软考常考:自然连接与等值连接的区别;自然连接结果属性数 = R属性数 + S属性数 − 同名属性数。


六、除(Division)

定义:R(X,Y) ÷ S(Y) = { x | 对所有 y ∈ S,都有 (x,y) ∈ R }
结果属性:X(即R中除去S属性后的属性)。
用途:解决“包含所有”“选修了全部课程”等查询。

示例

R(A,B): (1,2), (1,3), (2,3), (3,2), (3,3) S(B): (2), (3) R ÷ S = (1), (3)

解释:A=1 对应 B=2,3,包含S中所有B;A=3 对应 B=2,3,也包含;A=2 只对应 B=3,不包含B=2,所以排除。

软考常考:除法用于“全部”“所有”语义;结果属性为R属性减去S属性。


七、综合例题

例题1:学生选课数据库

设:

  • 学生 S(学号, 姓名, 性别, 年龄)
  • 课程 C(课程号, 课程名, 学分)
  • 选课 SC(学号, 课程号, 成绩)

查询1:查询选修了“数据库”课程的学生姓名。

π_{姓名}(σ_{课程名='数据库'}(S ⋈ SC ⋈ C))

或:

π_{姓名}(S ⋈ SC ⋈ σ_{课程名='数据库'}(C))

查询2:查询选修了全部课程的学生学号。

π_{学号,课程号}(SC) ÷ π_{课程号}(C)

查询3:查询至少选修了课程号为“C01”和“C02”的学生学号。

π_{学号}(σ_{课程号='C01'}(SC)) ∩ π_{学号}(σ_{课程号='C02'}(SC))

例题2:计算关系代数表达式

给定:

R(A,B): (1,2), (2,3), (3,4) S(B,C): (2,5), (3,6), (4,7)

求:

  1. R ∪ S?不满足并相容(属性不同),不能直接并。
  2. π_A® = (1),(2),(3)
  3. σ_{B>2}® = (2,3),(3,4)
  4. R ⋈ S = (1,2,5),(2,3,6),(3,4,7)
  5. R × S 结果元组数 = 3×3=9。

八、软考常见题型与技巧

题型一:判断表达式含义

例题:表达式 π_{学号}(σ_{成绩>90}(SC)) 的含义是( )。
A. 查询成绩大于90的学生学号
B. 查询所有学生学号
C. 查询成绩大于90的课程号
D. 查询选修了课程的学生学号
答案:A

题型二:根据需求写关系代数

例题:查询没有选修任何课程的学生学号。

π_{学号}(S) − π_{学号}(SC)

题型三:计算表达式结果

例题:R(A,B): (1,2),(2,3),(3,4);S(B,C): (2,5),(3,6)。求 R ⋈ S。
答案:(1,2,5),(2,3,6)

题型四:除法应用

例题:查询选修了全部课程的学生姓名。

π_{姓名}(S ⋈ (π_{学号,课程号}(SC) ÷ π_{课程号}(C)))

九、易错点与注意事项

  1. 并、交、差必须并相容,否则不能运算。
  2. 投影会自动去重,选择不会。
  3. 自然连接去掉重复属性列,等值连接保留。
  4. 笛卡尔积结果元组数 = |R| × |S|,属性数 = R属性数 + S属性数。
  5. 除法用于“包含所有”,结果属性为R属性减去S属性。
  6. 差运算不满足交换律,R−S ≠ S−R。
  7. 连接条件中属性名冲突需加关系名前缀
  8. 关系代数表达式可以嵌套,先内层后外层。
  9. 并、交、差的结果属性名继承第一个关系
  10. SQL与关系代数对应:SELECT对应投影,WHERE对应选择,JOIN对应连接。

十、总结与速记

速记1:八大运算

运算符号作用关键点
合并元组并相容
公共元组并相容
去掉公共并相容,不交换
笛卡尔积×全组合元组数相乘
选择σ选行条件筛选
投影π选列自动去重
连接按条件拼接自然连接去重列
÷包含所有结果属性为差集

速记2:核心区别

  • 选择行,投影列。
  • 自然连接去重列,等值连接不去。
  • 除法对应“全部”“所有”。
  • 并交差要并相容。

速记3:常用表达式

  • 没有选修任何课程:π_{学号}(S) − π_{学号}(SC)
  • 选修了全部课程:π_{学号,课程号}(SC) ÷ π_{课程号}©
  • 选修了“数据库”的学生姓名:π_{姓名}(S ⋈ SC ⋈ σ_{课程名=‘数据库’}©)

掌握以上内容,配合历年真题练习,关系代数部分即可轻松得分。建议重点练习根据需求写关系代数表达式、自然连接结果计算和除法应用。

发布日期:2026-09-23
下期预告:数据库系统——SQL语言(DDL、DML、DCL、查询),敬请关注。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询