一、关系运算
1. 并
1)并集的基本概念与高中数学中的并集
- 集合运算基础: 高中数学中的并集运算A∪B表示由属于A或属于B的元素组成的集合,在关系运算中原理类似
- 可视化理解: 在维恩图中表现为两个集合外轮廓组成的整圈区域
2)关系运算中的并集及前提条件
- 前提条件: 关系R与S必须具有相同的关系模式才能进行并运算
- 运算定义: 记作R∪S={t∣t∈R∨t∈S},其中t为元组变量
3)相同关系模式的定义
- 严格定义: 不仅要求属性名称和个数相同,还要求对应属性的数据类型、取值范围(域)必须一致
- 数据格式要求: 例如日期属性必须同为DATE类型,不能一个为DATE一个为CHAR
4)实例:学校两个学院学生信息表的合并
- 实际案例: 外语学院与计算机学院合并学生信息表时,必须确保两表的字段结构完全兼容
- 格式冲突示例: 出生日期字段若一个为DATE类型,一个为CHAR类型则无法合并
5)并集的结果与元组构成
- 结果构成: 由属于R或属于S的元组组成,且自动去除重复元组
- 元组概念: 每行数据称为一个元组,结果集的关系模式与原关系相同
6)例题1:求两个关系的并集
- 解题步骤:
- 确认两关系模式相同(属性ABC)
- 合并所有元组并去重
- 结果包含:ABC、bad、cde、dfg、fhk
- 去重原则: 如bad在两关系中重复出现,结果中只保留一个
2. 差
- 运算定义:R−S={t∣t∈R∧t∉S},表示在R中但不在S中的元组
- 前提条件: 同样要求两关系具有相同的关系模式
- 判断方法: 以R为基准逐条检查,保留不在S中的元组
- 实例解析:
- ABC在R不在S → 保留
- bad在R也在S → 排除
- cde在R不在S → 保留
- dfg在R也在S → 排除
3. 广义笛卡尔积
1)广义笛卡尔积的定义
- 基本概念: 记作R×S,不要求关系模式相同
- 结果结构: 若R为n目关系,S为m目关系,则结果为(n+m)列
2)广义笛卡尔积的属性列构成
- 属性命名: 同名属性需加关系名前缀区分(如r.B和s.B)
- 列合并规则: 结果包含R的所有属性列在前,S的所有属性列在后
3)广义笛卡尔积的元组值构成
- 生成方法: R的每个元组与S的所有元组组合
- 实例演示:
- R有元组(1,2)和(3,4)
- S有元组(a,b,c)、(a,b,e)、(c,d,e)
- 结果为6个元组:(1,2,a,b,c)、(1,2,a,b,e)...(3,4,c,d,e)
4. 投影及广义投影
1)投影的定义与运算
- 运算本质: 垂直方向(列方向)的选择操作
- 表示方法:πA(R)表示从R中选择属性列A组成新关系
- SQL对应: 相当于SELECT语句中的列选择
2)广义投影的定义与运算
- 扩展功能: 允许在投影列表中使用算术表达式
- 表示方法:πF1,F2,...,Fn(R),其中Fi为算术表达式
3)例题1: 投影运算实例
- 案例场景: 从工资表salary中仅查询ID和基本工资
- 运算表示:πID,基本工资(salary)
- 结果特征: 结果关系只包含指定两列,行数不变
4)例题2: 广义投影运算实例
- 计算需求: 查询每个职工的基本工资与奖励总和
- 运算表示:πID,基本工资+奖励(salary)
5. 选择
- 运算方向: 从关系的水平方向进行运算,即选择符合条件的行(元组)
- 符号表示: 记作σF(R),其中σ读作"sigma"
- 形式定义:σF(R)={t∣t∈R∧F(t)=true}
- 条件表达式:
- 运算对象: 可以是属性名、列的序号或常数
- 运算符: 包括算术比较符(<,>,≥,≤,≠)和逻辑运算符(∧,∨,¬)
- 重要区别:
- 无引号数字: 表示列的序号,如σ1>6(R)表示选择R中第1列值大于第6列值的元组
- 带引号数字: 表示具体数值,如σ1>′6′(R)表示选择R中第1列值大于数字6的元组
- 记忆技巧:
σ符号上方的小尾巴是平的,联想为"水平"方向选择行
- 与投影运算π(竖线联想为"垂直"方向选择列)形成对比
1)例题:求关系代数运算表达式
- 题目解析:
- 笛卡尔积(R×S):
- 属性列合并规则:保留原关系名称作为前缀(如R.A, S.B)
- 元组数量:R的元组数×S的元组数(本例为4×3=12行)
- 投影运算(π_{A,C}(R)):
- 垂直选择R中的A列和C列
- 结果列顺序按指定顺序排列
- 选择运算(σ_{A>B}(R)):
- 比较列名时:按字母顺序判断大小(b>a, d>c等)
- 等价表示:也可写作σ_{1>2}(R)
- 复合运算(σ_{3<4}(R×S)):
- 先计算R×S,再在结果中选择第3列值小于第4列的元组
- 列序号计算:从左到右依次编号(R.A=1, R.B=2,...,S.C=6)
- 笛卡尔积(R×S):
- 易错点:
- 混淆带引号和不带引号数字的含义
- 笛卡尔积中同名属性的前缀处理
- 字母比较时的大小判断规则(按字母表顺序)
6. 扩展的关系运算
1)交
- 前提条件:关系R与S必须具有相同的关系模式
- 运算定义:由同时属于R和S的元组构成,记作R∩S,形式定义为R∩S={t∣t∈R∧t∈S}
- 运算过程:
- 以任一关系为基准(如R),逐个检查其元组是否也存在于另一关系(如S)中
- 示例中关系R和S的交集结果为{4,5,6},因为这是唯一同时出现在两个关系中的元组
- 可视化理解:可以想象为两个集合的重叠部分,即"既在R当中,也在S当中"的中间区域
2)连接运算
- 本质特征:是笛卡尔积的扩展形式,在笛卡尔积基础上增加了条件选择
- 与笛卡尔积的区别:
- 笛卡尔积:无条件组合两个关系的所有元组和属性
- 连接运算:只选择满足特定条件的笛卡尔积结果行
- 分类依据:根据选择条件的不同分为三种类型
- θ连接(theta连接):使用任意比较运算符的条件
- 等值连接:专门使用等号"="作为比较条件
- 自然连接:特殊的等值连接,自动匹配同名属性并消除重复列
3)连接
- θ连接
- 定义与运算规则
- 本质:θ连接是一种有条件的笛卡尔积运算,通过比较运算符筛选符合条件的元组
- 数学表达:R⋈XθYS=σXθY(R×S),其中θ为比较运算符(>、<、=、≠),X和Y分别为R和S上可比较的属性组
- 运算步骤:
- 先计算关系R和S的笛卡尔积R × S
- 在笛卡尔积结果中选择满足XθY条件的元组
- 属性要求:参与比较的属性组必须具有可比性,如数字与数字比较,不能是字母与数字比较
- 例题:θ连接求解
- 题目解析:
- 给定关系R(A,B)和S(B,C),求R⋈R.A<S.B
- 标准解法:
- 计算R×S得到12行6列的中间结果(R有4行,S有3行)
- 筛选满足R.A < S.B条件的元组
- 简化技巧:
- 直接比较R.A列与S.B列的值,避免完整计算笛卡尔积
- 以R为基准:依次比较R.A(2,3,4)与S.B(1,8)
- 2<8 → 保留(2,1,4,6,8)
- 3<8 → 保留(3,4,5,6,8)
- 4<8 → 保留(4,6,7,6,8)
- 或以S为基准:找出S.B > R.A的所有组合
- 结果验证:两种方法得到相同结果,验证了运算正确性
- 易错点:
- 忽略属性可比性要求
- 混淆属性前缀(需明确R.A或S.B)
- 笛卡尔积计算错误导致后续筛选出错
- 记忆技巧:
- "θ连先积后筛选,属性前缀不能忘"
- "简化计算有诀窍,直接比较效率高"
- 题目解析:
- 定义与运算规则
- 等值连接
- 定义:当连接条件θ为"等于"时称为等值连接,记作R⋈X=YS,其中X和Y是关系R和S中的属性组。
- 操作特点:
- 不需要先计算笛卡尔积,直接寻找满足R.A=S.C的元组组合
- 示例中关系R有4行,关系S有3行,理论上笛卡尔积有12行,但等值连接只需匹配特定条件
- 匹配方法:
- 逐列比较属性值,如示例中比较R.A与S.C
- 建议用记号标注比较列避免混淆
- 匹配结果包含两个关系的所有属性列
- 例题:等值连接求解
- 解题步骤:
- 确定连接条件R.A=S.C
- 逐行比较R.A列与S.C列的值
- 找到匹配值c和d对应的元组
- 组合匹配元组形成结果关系
- 注意事项:
- 容易出现视觉混淆,建议做标记辅助
- 需要检查所有可能的匹配组合
- 结果保留两个关系的全部属性
- 解题步骤:
- 自然连接
- 特殊性质:
- 是等值连接的特例,要求比较的属性组必须同名
- 必须比较所有同名属性(如R.A=S.A且R.C=S.C)
- 结果中去除重复的属性列
- 与笛卡尔积关系:
- 若无同名属性,自然连接退化为笛卡尔积
- 操作流程:
- 识别所有同名属性组
- 执行等值连接(所有同名属性值相等)
- 在结果中去掉重复的属性列
- 实际应用:
- 数据库查询中最常用的连接方式
- 对应SQL语句:SELECT * FROM R NATURAL JOIN S
- 例题:自然连接求解
- 解题步骤:
- 识别同名属性A和C
- 执行等值连接R.A=S.A且R.C=S.C
- 在结果中去掉重复的A、C列(保留R.A和R.C)
- 组合匹配元组形成最终结果
- 特殊情况处理:
- 当S表新增acf行时,结果需包含所有匹配组合
- 示例结果应包含abcd和abcf两行
- 数据库实例:
- 学生表(学号,姓名)与成绩表(学号,成绩)的自然连接
- 结果包含学号、姓名、成绩三列
- 对应SQL:SELECT * FROM 学生,成绩 WHERE 学生.学号=成绩.学号
- 解题步骤:
- 特殊性质:
4)除
- 例题1: 除法求解实例
- 求解步骤:
- 找相同属性列:首先找出关系r和s中相同的属性组(如CD)
- 确定属性值:在s中找出这些相同属性列的值(如cdef)
- 筛选匹配行:在r中找出属性列值与s相同的行(如CD=cdef的行)
- 提取结果列:找出这些行中与s不同的属性列的值(如AB)
- 验证结果:确保当右边属性值相同时,左边结果列的值也相同(如AB相同)
- 具体实例:
- 当CD=cdef时,AB的值相同(都是AB),因此AB在结果中
- 当CD=ef时,AB的值不同(CF和gh),因此不满足条件
- 最终结果为包含AB列的关系
- 结果列确定:结果只包含r中与s不同的属性列(如AB)
- 求解步骤:
- 除法结果为空集的情况
- 空集条件:当在r中找不到任何行满足右边属性值相同且左边结果列值相同时
- 空集表示:结果表结构保留(如AB列),但内容为空
- 示例说明:
- 如果去掉CD=cdef和CD=ef的行
- 则r÷s结果为只有AB列的空表
二、知识小结
知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
关系运算分类 | 基本关系代数运算和扩展关系运算 | 区分基本运算和扩展运算的边界 | ⭐⭐ |
并运算 | 由属于R或属于S的元组构成,要求关系模式相同(属性名称、数据类型、取值范围一致) | 重复元组自动去重,类似数学并集概念 | ⭐⭐ |
差运算 | 由属于R但不属于S的元组构成(在R中且不在S中) | 与数学差集概念一致,注意关系模式一致性要求 | ⭐⭐ |
广义笛卡尔积 | 结果列数为n+m列(R列数+S列数),元组数为R×S | 属性名重复时需加关系名前缀(如r.B和s.B) | ⭐⭐⭐ |
投影运算 | 垂直方向选取列(π运算),可配合算术表达式(广义投影) | 区分选择行(σ)和选择列(π)的操作方向 | ⭐⭐ |
选择运算 | 水平方向筛选行(σ运算),条件表达式中: - 无引号数字表示列序 - 引号数字表示常量值 | σ₃<'4' vs σ₃<4 的语义差异 | ⭐⭐⭐ |
连接运算 | 有条件的笛卡尔积,分为: - θ连接(任意比较运算符) - 等值连接(=运算符) - 自然连接(自动匹配同名属性+去重列) | 自然连接需满足: 1. 所有同名属性相等 2. 结果去重 | ⭐⭐⭐⭐ |
除法运算 | 找出R中与S所有元组都关联的元组组合 | 操作步骤: 1. 找相同属性列 2. 匹配S中值组合 3. 提取R中对应非共有属性 | ⭐⭐⭐⭐ |
运算对比 | - 并/差/交:要求关系模式一致 - 笛卡尔积/连接:无模式限制 - 投影/选择:单关系操作 | 自然连接 vs 等值连接 的结果集差异 | ⭐⭐⭐ |