计算机中级-数据库系统工程师-关系运算(2)

一、关系运算
1. 自然连接
1)自然连接的定义与特点
  • 定义:在两个关系中,将相同属性列的值相等的元组进行连接,并在结果集中去掉重复的属性列。
  • 特点:
    • 需要两个关系具有相同的属性列
    • 结果集中会去掉重复的属性列
    • 当两个关系没有相同属性列时,等价于笛卡尔积
  • 问题:会丢失未匹配的元组信息。例如学生表S(学号,姓名)和成绩表SC(学号,成绩)自然连接时,缺考学生(如学号003的王五)不会出现在结果中。
2. 外连接
1)左外连接
  • 符号表示:在自然连接符号左侧加两横,记为R ⊳\joinrel⊲ S
  • 运算过程:
    • 先计算自然连接结果
    • 取出左侧关系中所有未与右侧匹配的元组
    • 用NULL填充右侧关系的属性
    • 将补充的元组加入自然连接结果
  • 示例:学生表S左外连接成绩表SC时,会保留所有学生信息,缺考学生的成绩显示为NULL
  • 应用场景:需要保留左侧关系全部信息时使用,如查询所有学生(包括缺考)的成绩
2)右外连接
  • 符号表示:在自然连接符号右侧加两横,记为R \joinrel⊳⊲ S
  • 运算过程:
    • 先计算自然连接结果
    • 取出右侧关系中所有未与左侧匹配的元组
    • 用NULL填充左侧关系的属性
    • 将补充的元组加入自然连接结果
  • 示例:关系R右外连接关系S时,会保留S中所有元组,未匹配的R属性用NULL填充
3)全外连接
  • 符号表示:在自然连接符号两侧各加两横,记为R \joinrel⊳\joinrel⊲ S
  • 运算过程:
    • 计算左外连接和右外连接的结果
    • 对两个结果取并集
    • 自然连接部分只保留一次
  • 特点:同时保留两个关系中所有未匹配的元组,是最完整的外连接方式
3. 关系运算的总结
  • 并运算:R∪S,取在R或S中的行,要求R与S关系模式相同
  • 差运算:R−S,取在R中但不在S中的行
  • 交运算:R∩S,取既在R中又在S中的行
  • 选择运算:σ条件(R),选取满足条件的行
  • 投影运算:π属性列(R),选取指定的属性列
  • 连接运算:
    • θ连接:先笛卡尔积再做选择
    • 等值连接:θ为等号的特殊情况
    • 自然连接:等值连接+去重属性列
    • 外连接:保留未匹配元组(左/右/全)
4. 应用案例
1)例题:关系运算定义判断
  • 交集运算特性:关系E∩F的结果元组必须同时属于关系E和F,这是交集的本质特征。

  • 验证方法:可通过构造具体实例验证运算结果,如:

    • 设E={1,2,3,4,5,6},F={4,5,6,7,8,9}

    • E×F(笛卡尔积)结果元组不满足同时属于条件

    • E∪F(并集)包含只属于单个关系的元组(如7,8,9)

    • E−F(差集)结果元组必然不属于F

  • 排除技巧:当不确定时,通过具体例子验证各选项是否符合"元组同时属于E和F"的要求。

2)例题:关系运算计算院校院系
  • 除法运算应用:
    • 关系E(学院,课程) ÷ 关系F(课程) → 结果仅保留"学院"属性
    • 运算逻辑:找出E中包含F所有课程的学院
    • 实例验证:计算机学院包含F中"数据库"课程,且是唯一满足条件的学院
  • 笛卡尔积排除:
    • E×F会产生4×1=4行结果,属性数为3个

    • 不符合题目要求的单行单属性结果

  • 运算方向:E÷F与F÷E不等价,需注意被除关系(E)应包含除关系(F)的所有属性
3)例题:关系表达式查询
  • 自然连接选择:
    • 需要关联E(学校名称,所在地)和F(学校名称,专业代码,分数线)
    • 通过共同属性"学校名称"自然连接(⋈)可保留所有所需信息
  • 集合运算排除:
    • 并交运算要求关系模式相同(属性个数和名称一致)
    • E有2个属性,F有3个属性,无法直接进行并交运算
  • 验证方法:可构造示例数据验证笛卡尔积会产生错误关联(如学校与错误所在地匹配)
4)例题:投影运算
  • 投影运算特性:
    • π主管部门(E)

      直接提取指定列,保留所有行(包括重复值)

    • 结果应为{教育部,教育部,浙江,广西},不自动去重

  • 常见错误:
    • 误选去重结果(如选项B)
    • 混淆投影与SQL的DISTINCT操作
  • SQL对应:相当于SELECT 主管部门 FROM E基础查询语句
5)例题:关系表达式计算
  • 运算可行性判断:
    • 并/交/差运算要求关系模式严格一致
    • R(efg)与S(fghk)属性不同,只能进行笛卡尔积(R×S)
  • 属性集差运算:
    • R-S指在R但不在S中的属性集合
    • R有{e,f,g},S有{f,g,h,k} → 结果仅含{e}
  • 易混淆点:
    • 关系代数差运算(元组级)与属性集差运算的区别
    • 前者要求关系模式相同,后者比较属性集合
6)例题:关系笛卡尔积和自然连接
  • 笛卡尔积运算
    • 属性计算:给定关系R(A,B,C,D)与S(C,D,E,F),R×S的结果包含两个关系的所有属性列,属性个数为∣R∣+∣S∣(即4+4=8个)
    • 重复列处理:当存在相同属性列时,结果中需要带上关系名称作为前缀(如r.C和s.Cs.Cs.C)
  • 自然连接运算
    • 运算基础:建立在笛卡尔积基础上,要求相同属性列的值必须相等
    • 属性处理:
      • 去掉重复的属性列(如R和S都有C,D列,结果中只保留一组)
      • 最终属性个数为∣R∣+∣S∣−相同属性数(即4+4-2=6个)
    • 等价转换:可以表示为先求笛卡尔积,再选择相同属性值相等的元组(σr.C=s.C∧r.D=s.D(R×S))
  • 例题解析
    • 题目解析:
      • 第一问:R×S属性数8个,自然连接属性数6个 → 正确答案A
      • 第二问:
        • 自然连接后属性列计算:R(A,B,C,D)和S(A,C,D,E,F)有3个重复属性,总列数=4+5-3=6 → 选C
        • 等价表达式分析:
          • 需要同时满足:r.A=s.A、r.C=s.C、r.D=s.D(对应列号1=5、3=6、4=7)
          • 附加条件r.C>s.F对应3>9
          • 最终正确形式为π1,2,3,4,8,9(σ1=5∧3=6∧4=7∧3>9(R×S))→ 选B
7)例题:关系表达式等价判断
  • 关系运算顺序
    • 运算结构分析:应从最内层括号开始,自右向左解读表达式
    • 自然连接本质:
      • 先求笛卡尔积
      • 选择相同属性值相等的元组(如r.A2=s.A2∧r.A3=s.A3)
      • 去掉重复属性列
  • 等价转换技巧
    • 常见错误:
      • 混淆"且"(∧)和"或"(∨)条件 → A选项错误
      • 遗漏自然连接的相等条件 → B选项不完全正确
      • 列号引用错误(如对3列关系引用第6列) → C选项错误
    • 正确方法:
      • 保持原表达式的逻辑连接词
      • 完整保留所有相等条件
      • 准确对应属性列的编号
  • 例题解析
    • 题目解析:
      • 原表达式:πA1,A4(σA2<2017∧A4=95(R⋈S))
      • 正确等价形式:
        • 先分别选择:σA2<2017(R)和σA3=95(S)
        • 求笛卡尔积后仍需添加R.A2=S.A2∧R.A3=S.A3条件
        • 最终正确选项D包含所有必要条件
      • 易错点:容易忽略自然连接隐含的属性相等条件
  • 笛卡尔积模式
    • 结果关系模式:
      • 包含两个关系的所有属性
      • 同名属性需加关系前缀
      • 正确模式应为X(R.A,B,R.C,D,S.A,S.C,E,G)→ 选C
    • 错误选项分析:
      • A缺少关系前缀
      • B只包含R的属性
      • D缺少关键属性
8)例题:笛卡尔积关系模式
  • 关系模式定义:给定关系R(A,B,C,D)和S(A,C,E,G),其笛卡尔积R×S的关系模式应包含两个关系的所有属性列
  • 属性命名规则:
    • 对于两个关系中相同的属性名(如A、C),需要加上关系名前缀区分(如R.A、S.A)
    • 不同名的属性直接保留原名称
  • 正确选项分析:
    • C选项X(R.A, B, R.C, D, S.A, S.C, E, G)完整包含所有属性并正确区分了同名属性
9)例题:关系r1投影运算得到r2
  • 题目解析:
    • 观察关系r2包含的行:需要识别出r2实际由r1中的哪些行组成
    • 关键判断依据:r2包含r1中价格≥8的三行记录(价格为18、8、8的记录)
  • 选项分析:
    • A选项(商品名=毛巾或钢笔):错误,会包含不满足条件的其他钢笔记录
    • B选项(价格≥8):正确,完全匹配r2包含的记录
    • C选项(投影运算):错误,投影不会改变行数
    • D选项(商品编号筛选):错误,会漏掉符合条件的记录
  • 易错点:
    • 注意区分选择运算(筛选行)和投影运算(筛选列)的不同作用
    • 需要仔细核对每个选项对应的实际结果是否与r2完全一致
10)例题:自然连接运算属性个数
  • 自然连接运算基础
    • 属性计算规则:给定关系

    • R(A,B,C,D)和关系S(C,D,E),自然连接运算R⋈S会去除重复列C,D,结果属性为A,B,C,D,E共5个

    • 等价转换方法:自然连接可转换为笛卡尔积+选择+投影的组合运算,需满足:

      • 笛卡尔积R×S的属性列为R和S属性的并集
      • 选择条件为相同属性列值相等(如R.C=S.C∧R.D=S.D)
      • 投影去除重复列
  • 例题解析
    • 题目解析:
      • 属性个数:确认R⋈S结果为5个属性(A,B,C,D,E)
      • 表达式分析:
        • 选项A/C直接比较数字而非属性列,排除
        • 选项B使用单引号表示字符比较,与题意r.b>s.e不符
        • 选项D正确体现:先笛卡尔积,再选择(第2列>第7列且第3列=第5列且第4列=第6列),最后投影
    • 验证技巧:
      • 笛卡尔积后属性顺序为R全部列+S全部列
      • 自然连接条件转换为:R的第1列=S的第4列,R的第2列=S的第5列
      • 附加选择条件r.b>s.e对应笛卡尔积后的第2列>第7列
  • 外连接运算
    • 关联实现:
      • 关联机制:通过外码(Foreign Key)建立表间关联
      • 合并运算:自然连接(Natural Join)可合并关联表并去除重复列
    • 外连接类型:
      • 左外连接:保留左表所有元组,右表不匹配处填NULL
      • 右外连接:保留右表所有元组,左表不匹配处填NULL
      • 全外连接:保留两侧所有元组,不匹配处填NULL
  • 除法运算示例
    • 除法运算要点:
      • 计算R÷S时,先提取S在R中的对应属性投影
      • 结果包含R中与S所有元组都有关联的元组
    • 外连接计数:
      • 左外连接元组数=左表基数(含不匹配项)
      • 右外连接元组数=右表基数(含不匹配项)
      • 全外连接元组数=内连接数+左表独有数+右表独有数
  • 解题技巧总结
    • 快速判断:
      • 自然连接属性数=R属性数+S属性数-重复属性数
      • 外连接元组数可通过维恩图辅助计算
    • 易错提示:
      • 注意选择条件中数字与属性列的对应关系
      • 区分字符比较(带引号)与属性列比较(无引号)
11)例题:关系代数表达式验证
  • 自然连接转换方法:将自然连接转换为笛卡尔积加条件的形式,需要满足两个条件:
    • 相同属性列的值相等:R.C=S.C且R.D=S.D(即3=5且4=6)
    • 附加条件:R.B>S.E(即2>7)
  • 投影运算处理:自然连接后需要去掉重复属性列(保留R的C,D列,去掉S的C,D列),因此最终投影列为1,2,3,4,7
  • 完整表达式:π1,2,3,4,7(σ2>7∧3=5∧4=6(R×S))
  • 验证过程:通过属性编号确认各条件对应位置,R的属性为A(1),B(2),C(3),D(4),S的属性为 C(5),D(6),E(7)
12)例题:表关联关系实现和运算
  • 表关联实现方式:
    • 外码机制:通过将一个表的主码作为另一个表的属性(外码)建立关联
    • 示例:学生表(学号[主码],姓名,院系编号[外码])与院系表(院系编号[主码],院系名称)通过院系编号关联
  • 合并表运算选择:
    • 自然连接优势:能正确合并关联表信息,自动处理重复属性列
    • 笛卡尔积问题:会产生大量无意义组合(如学号与成绩错误配对)
    • 选择/投影不足:选择只能筛选行,投影只能筛选列,都无法完整合并表信息
  • 典型应用场景:
    • 通过自然连接查询跨表信息(如学生所在院系名称)
    • 保持原始信息完整性,避免笛卡尔积导致的信息混乱
13)例题:关系代数表达式计算
  • 表间关联与运算
    • 关联实现方式: 关系数据库中表与表的关联通过外码实现,通过自然连接运算将两个关联表合并成信息等价的表。
    • 运算顺序原则: 关系代数表达式计算应从右往左依次进行,先观察整体结构再逐步分解。
  • 除法运算详解
    • 计算步骤:
      • 找出两个关系的相同属性列(如A1,A2)
      • 在被除数关系R中查找与除数关系S投影结果匹配的元组
      • 结果保留R中不与S重复的属性列(如A3)
    • 实例分析: 当R的A1,A2列包含(2,1),(3,4)且对应A3值均为4时,R÷S结果为{4}
  • 外连接运算
    • 自然连接基础: 先求两关系的自然连接结果,匹配相同属性列(A1=A1且A2=A2)
    • 左外连接:
      • 在自然连接基础上补充左表未匹配元组
      • 缺失属性用NULL填充
      • 示例中元组数为4(含(1,2,3,null),(4,6,7,null))
    • 右外连接:
      • 补充右表未匹配元组
      • 示例中元组数同样为4
    • 全外连接:
      • 合并左右外连接结果
      • 需去重自然连接部分
      • 示例元组数=4+4-2=6
  • 例题解析
    • 第37题解析:
      • 先计算σ1<3(S)得到{(2,1,8),(3,4,4)}
      • 投影πA1,A2后为{(2,1),(3,4)}
      • 最终R÷S结果为{4}(对应选项A)
    • 第38题解析:
      • 左外连接:4个元组(含2个补充元组)
      • 右外连接:4个元组(含2个补充元组)
      • 全外连接:6个元组(4+4-2个重复)
      • 正确答案为D选项(4,4,6)
14)例题:自然连接属性列个数
  • 属性列计算规则
    • 基本公式: 自然连接后的属性列数=两关系属性列数之和-重复属性列数
    • 实例验证:
      • R(A,B,C,D)有4列

      • S(A,C,D,E)有4列

      • 重复列A,C,D共3列

      • 结果列数=4+4-3=5(对应选项B)

  • 关系代数等价转换
    • 转换原理: 自然连接可转换为选择+投影的组合运算
    • 典型结构:
      • 先做笛卡尔积R×S
      • 用选择σ筛选匹配元组(如σ1=5∧3=6∧4=7)
      • 用投影π保留所需列(如π1,2,3,4,8)
    • 易错提示: 注意属性列的原始位置编号,R×S会产生1-8列的新关系
二、知识小结

|---------|------------------------------|-----------------------------|-------|
| 知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
| 关系运算 | 包括并、差、交、笛卡尔积、选择、投影、连接、除等基本运算 | 并、差、交要求关系模式相同;自然连接需去重 | ⭐⭐⭐ |
| 自然连接 | 基于相同属性列的值相等,并去掉重复列 | 若两表无相同属性列,则等价于笛卡尔积 | ⭐⭐⭐⭐ |
| 外连接 | 处理缺失信息,包括左外连接、右外连接、全外连接 | 左外连接保留左表未匹配元组,右外连接保留右表未匹配元组 | ⭐⭐⭐⭐ |
| 左外连接 | 保留左表所有元组,右表不匹配的用NULL填充 | 符号:⋉(左侧加两横) | ⭐⭐⭐ |
| 右外连接 | 保留右表所有元组,左表不匹配的用NULL填充 | 符号:⋊(右侧加两横) | ⭐⭐⭐ |
| 全外连接 | 综合左外和右外连接的结果,保留所有未匹配元组 | 符号:⨝(左右均加两横) | ⭐⭐⭐⭐ |
| 除法运算 | 找出满足条件的元组,结果仅包含非公共属性 | 需先匹配公共属性列的值 | ⭐⭐⭐⭐⭐ |
| 关系代数表达式 | 通过运算符组合关系运算,如σ、π、⋈等 | 注意运算符优先级和括号匹配 | ⭐⭐⭐⭐ |
| 真题解析 | 历年考题涉及自然连接、外连接、除法等高频考点 | 重点掌握符号表示和运算规则 | ⭐⭐⭐⭐ |

相关推荐
2301_775148152 小时前
Go语言怎么做接口签名_Go语言API签名验证教程【精通】
jvm·数据库·python
m0_493934532 小时前
Chrome 75 不支持 arrayBuffer() 方法:替代方案详解
jvm·数据库·python
qq_372906932 小时前
MySQL数据库提示表损坏怎么修复_使用REPAIR TABLE修复方案
jvm·数据库·python
Absurd5872 小时前
golang如何实现错误预算Error Budget计算_golang错误预算Error Budget计算实现实战
jvm·数据库·python
Yushan Bai2 小时前
ORACLE数据库从WINDOWS环境迁移到LINUX环境并升级的方案步骤
数据库·oracle
2301_764150562 小时前
HTML5中结合IDBKeyRange限制游标扫描的数据范围
jvm·数据库·python
Polar__Star2 小时前
mysql如何快速判断两个数据库结构差异_使用mysqldiff工具.txt
jvm·数据库·python
雪碧聊技术2 小时前
mysql表级锁的介绍
数据库·mysql
weixin_424999362 小时前
Golang怎么写基准测试benchmark_Golang基准测试教程【完整】
jvm·数据库·python