目标:一文彻底掌握软考上午题中“关系代数”所有高频考点。包含并、交、差、笛卡尔积、选择、投影、连接、除八大运算的符号、定义、适用条件、计算方法与典型例题。配学生选课实例和软考风格练习题,看完这篇,无需再翻其他资料。
一、关系代数概述
关系代数是一种过程化查询语言,以关系为运算对象,通过对关系进行一系列运算得到查询结果。关系代数是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<42. 等值连接(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)求:
- R ∪ S?不满足并相容(属性不同),不能直接并。
- π_A® = (1),(2),(3)
- σ_{B>2}® = (2,3),(3,4)
- R ⋈ S = (1,2,5),(2,3,6),(3,4,7)
- 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)))九、易错点与注意事项
- 并、交、差必须并相容,否则不能运算。
- 投影会自动去重,选择不会。
- 自然连接去掉重复属性列,等值连接保留。
- 笛卡尔积结果元组数 = |R| × |S|,属性数 = R属性数 + S属性数。
- 除法用于“包含所有”,结果属性为R属性减去S属性。
- 差运算不满足交换律,R−S ≠ S−R。
- 连接条件中属性名冲突需加关系名前缀。
- 关系代数表达式可以嵌套,先内层后外层。
- 并、交、差的结果属性名继承第一个关系。
- SQL与关系代数对应:SELECT对应投影,WHERE对应选择,JOIN对应连接。
十、总结与速记
速记1:八大运算
| 运算 | 符号 | 作用 | 关键点 |
|---|---|---|---|
| 并 | ∪ | 合并元组 | 并相容 |
| 交 | ∩ | 公共元组 | 并相容 |
| 差 | − | 去掉公共 | 并相容,不交换 |
| 笛卡尔积 | × | 全组合 | 元组数相乘 |
| 选择 | σ | 选行 | 条件筛选 |
| 投影 | π | 选列 | 自动去重 |
| 连接 | ⋈ | 按条件拼接 | 自然连接去重列 |
| 除 | ÷ | 包含所有 | 结果属性为差集 |
速记2:核心区别
- 选择行,投影列。
- 自然连接去重列,等值连接不去。
- 除法对应“全部”“所有”。
- 并交差要并相容。
速记3:常用表达式
- 没有选修任何课程:π_{学号}(S) − π_{学号}(SC)
- 选修了全部课程:π_{学号,课程号}(SC) ÷ π_{课程号}©
- 选修了“数据库”的学生姓名:π_{姓名}(S ⋈ SC ⋈ σ_{课程名=‘数据库’}©)
掌握以上内容,配合历年真题练习,关系代数部分即可轻松得分。建议重点练习根据需求写关系代数表达式、自然连接结果计算和除法应用。
发布日期:2026-09-23
下期预告:数据库系统——SQL语言(DDL、DML、DCL、查询),敬请关注。