目标:一文彻底掌握软考上午题中“关系代数”所有高频考点。包含并、交、差、笛卡尔积、选择、投影、连接、除八大运算的符号、定义、适用条件、计算方法与典型例题。配学生选课实例和软考风格练习题,看完这篇,无需再翻其他资料。
一、关系代数概述
关系代数是一种过程化查询语言,以关系为运算对象,通过对关系进行一系列运算得到查询结果。关系代数是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)
求:
八、软考常见题型与技巧
题型一:判断表达式含义
例题:表达式 π_{学号}(σ_{成绩>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:常用表达式
- 没有选修任何课程:π_{学号}(S) − π_{学号}(SC)
- 选修了全部课程:π_{学号,课程号}(SC) ÷ π_{课程号}©
- 选修了“数据库”的学生姓名:π_{姓名}(S ⋈ SC ⋈ σ_{课程名=‘数据库’}©)
掌握以上内容,配合历年真题练习,关系代数部分即可轻松得分。建议重点练习根据需求写关系代数表达式、自然连接结果计算和除法应用。
发布日期:2026-09-23
下期预告:数据库系统——SQL语言(DDL、DML、DCL、查询),敬请关注。







