当前位置: 首页 > news >正文

数据库系统概论(六)详细讲解关系代数(利用简单到难的层次带你一步一步掌握)

数据库系统概论(六)详细讲解关系代数

  • 前言
  • 一、什么是关系代数?
  • 二、传统的集合运算
    • 1. 并(Union)
    • 2. 差(Difference)
    • 3. 交(Intersection)
    • 4. 笛卡尔积(Cartesian Product)
  • 三、专门的集合运算
    • 1. 选择(Selection)
    • 2. 投影(Projection)
    • 3. 连接(Join)
      • ① 非等值连接
      • ② 等值连接
      • ③ 自然连接
      • ④ 外连接(保留未匹配的行)
    • 4. 除(Division)
  • 四、总结


前言

  • 在数据库系统概论的学习进程中,我们已逐步解锁数据库的关键领域,从基础概念的积淀到关系模型数据结构的深度解析,每一篇都在为构筑完备的数据库知识大厦奠基
  • 作为系列的第六篇,本文将深度钻研关系代数 —— 这一数据库操作的形式化语言。它不仅是破解数据库查询与数据操作奥秘的核心密钥,更是精通数据库设计、提升查询优化能力的关键阶梯,将带领我们进一步洞悉数据库高效运作的数据处理之道。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的数据库系统概论专栏
https://blog.csdn.net/2402_83322742/category_12911520.html?spm=1001.2014.3001.5482


一、什么是关系代数?

在这里插入图片描述

简单理解:关系代数是数据库的“数学语言”,用来定义如何对数据表(二维表格)进行操作。
核心思想:通过各种“运算符”对表进行“行”或“列”的处理,得到新表。

二、传统的集合运算

前提:参与运算的表必须“相容”

即 **列数相同,且对应列的数据类型一致**(比如都是“姓名”“年龄”这样的列)。

1. 并(Union)

作用:合并两个表的所有数据,重复数据只保留一份。
符号:R∪S
例子

表A(选课学生)姓名课程
张三数学
李四英语
表B(选课学生)姓名课程
张三语文
王五英语

并运算结果(表A∪表B):

姓名课程
张三数学
李四英语
张三语文
王五英语

2. 差(Difference)

作用:从表A中删除表B中存在的数据。
符号: ( R - S )
例子:表A - 表B(只保留表A有、表B没有的数据):

表A(选课学生)姓名课程
张三数学
李四英语
表B(选课学生)姓名课程
张三语文
王五英语
姓名课程
张三数学
李四英语

3. 交(Intersection)

作用:找出两个表中完全相同的数据。
符号: ( R ∩ S )
例子:表A∩表B(同时在表A和表B中出现的数据):

表A(学生选课表A)

姓名课程
张三英语
李四数学
王五语文

表B(学生选课表B)

姓名课程
张三英语
赵六物理
王五语文

交运算结果(表A ∩ 表B

姓名课程
张三英语
王五语文

4. 笛卡尔积(Cartesian Product)

作用:将两个表的每一行两两组合,生成一个大表。
符号: ( R × S )
例子

表A(学生)姓名性别
张三
李四
表B(课程)课程名
数学
英语

笛卡尔积结果(表A×表B,共 ( 2×2=4 ) 行):

姓名性别课程名
张三数学
张三英语
李四数学
李四英语

三、专门的集合运算

1. 选择(Selection)

作用:按条件筛选表中的“行”(筛选后行数可能减少)。
符号在这里插入图片描述

例子:从“学生表”中选出“年龄>18”的学生:

学生表姓名年龄性别
张三20
李四17

选择结果(( \sigma_{年龄>18}(学生表) )):

姓名年龄性别
张三20

2. 投影(Projection)

作用:选择表中的“列”,并去除重复行(筛选后列数可能减少)。
符号( \pi_{列1, 列2}(R) )

例子:从“学生表”中提取“姓名”和“性别”列:
投影结果
(( \pi_{姓名, 性别}(学生表) ))

姓名性别
张三
李四

3. 连接(Join)

作用:按条件将两个表“拼接”成一个表,重点是“如何拼接”。

① 非等值连接

条件:用“≠、>、<”等非等号条件拼接。
例子:表A(学生成绩)和表B(及格线)按“成绩>及格分”连接:

表A姓名成绩
张三80
李四50
表B课程及格分
数学60

结果(成绩>及格分,即80>60):

姓名成绩课程及格分
张三80数学60
  • 下面我们根据上面的图表增加点难度

关系 ( R )

( A )( B )( C )
( a_1 )( b_1 )( 5 )
( a_1 )( b_2 )( 6 )
( a_2 )( b_3 )( 8 )
( a_2 )( b_4 )( 12 )

关系 ( S )

( B )( E )
( b_1 )( 3 )
( b_2 )( 7 )
( b_3 )( 10 )
( b_3 )( 2 )
( b_5 )( 2 )

非等值连接 (E>C)

( A )( R.B )( C )( S.B )( E )
( a_1 )( b_1 )( 5 )( b_2 )( 7 )
( a_1 )( b_1 )( 5 )( b_3 )( 10 )
( a_1 )( b_2 )( 6 )( b_2 )( 7 )
( a_1 )( b_2 )( 6 )( b_3 )( 10 )
( a_2 )( b_3 )( 8 )( b_3 )( 10 )

② 等值连接

条件:用“=”拼接,要求两表有相同列名(或不同列名但值相等)。
例子:表A和表B按“课程=课程名”连接(假设列名不同但含义相同):

表A(选课)姓名课程
张三数学
表B(课程成绩)课程名成绩
数学85

结果(课程=课程名):

姓名课程课程名成绩
张三数学数学85
  • 下面我们根据上面的图表增加点难度

关系 ( R )

( A )( B )( C )
( a_1 )( b_1 )( 5 )
( a_1 )( b_2 )( 6 )
( a_2 )( b_3 )( 8 )
( a_2 )( b_4 )( 12 )

关系 ( S )

( B )( E )
( b_1 )( 3 )
( b_2 )( 7 )
( b_3 )( 10 )
( b_3 )( 2 )
( b_5 )( 2 )

等值连接 (R.B=S.B)

( A )( R.B )( C )( S.B )( E )
( a_1 )( b_1 )( 5 )( b_1 )( 3 )
( a_1 )( b_2 )( 6 )( b_2 )( 7 )
( a_2 )( b_3 )( 8 )( b_3 )( 10 )
( a_2 )( b_3 )( 8 )( b_3 )( 2 )

③ 自然连接

特点:自动去除重复列名,是“等值连接的优化版”(要求两表有至少一个同名列)。
例子:表A和表B都有“课程”列,自然连接后合并该列:

表A姓名课程
张三数学
表B课程成绩
数学85

结果(自动合并“课程”列):

姓名课程成绩
张三数学85
  • 下面我们根据上面的图表增加点难度

关系 ( R )

( A )( B )( C )
( a_1 )( b_1 )( 5 )
( a_1 )( b_2 )( 6 )
( a_2 )( b_3 )( 8 )
( a_2 )( b_4 )( 12 )

关系 ( S )

( B )( E )
( b_1 )( 3 )
( b_2 )( 7 )
( b_3 )( 10 )
( b_3 )( 2 )
( b_5 )( 2 )

自然连接 R组的B列与S组的B列如果相等则连接

( A )( B )( C )( E )
( a_1 )( b_1 )( 5 )( 3 )
( a_1 )( b_2 )( 6 )( 7 )
( a_2 )( b_3 )( 8 )( 10 )
( a_2 )( b_3 )( 8 )( 2 )

④ 外连接(保留未匹配的行)

  • 左外连接:保留左表所有行,右表无匹配的行用NULL填充。
  • 右外连接:保留右表所有行,左表无匹配的行用NULL填充。
  • 全外连接:保留左右表所有行,无匹配的行用NULL填充(SQL中常用,关系代数中较少提)。

例子:左表A(学生)和右表B(选课),左外连接保留所有学生,无论是否选课:

表A(学生)学号姓名
1张三
2李四
表B(选课)学号课程
1数学

左外连接结果

学号姓名课程
1张三数学
2李四NULL

表A

学号姓名
1张三
2李四

表B

学号课程
1数学
3英语

右外连接结果(保留右表B所有行,左表A无匹配填 NULL

学号姓名课程
1张三数学
3NULL英语

4. 除(Division)

作用:从“被除数表”中找出“完全包含除数表所有数据”的行。
前提

  • 被除数表(表A)需包含除数表(表B)的所有列,且还有额外列(如“学生”列)。
  • 结果是“额外列”中,满足“与除数表所有行相关”的值。

例子

表A(学生选课,被除数)学生课程
张三数学
张三英语
李四数学
王五英语
表B(必选课程,除数)课程
数学

除运算逻辑

  1. 表B要求“必须选数学”。
  2. 表A中每个学生的选课需包含表B的所有课程(即必须有“数学”)
  3. 筛选出“学生”列中,满足条件的学生:

除运算结果(表A ÷ 表B)

学生
张三
李四

四、总结

分类运算符作用描述核心操作对象例子关键词
传统集合运算并(∪)合并两表,去重整表合并选课学生
差(-)表A减表B整表找出表A独有的数据
交(∩)找出两表共同数据整表同时出现在两表中的学生
笛卡尔积(×)两两组合所有行整表学生×课程生成所有可能组合
专门集合运算选择(σ)按条件筛选行行(筛选)选出年龄>18的学生
投影(π)选择列,去重列(筛选)提取姓名和性别列
连接(⋈)按条件拼接两表行(拼接)等值连接、自然连接、外连接
除(÷)找出包含除数所有行的被除数数据行(匹配)找出选了所有必选课程的学生

以上就是这篇博客的全部内容,下一篇我们将继续探索更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的数据库系统概论专栏
https://blog.csdn.net/2402_83322742/category_12911520.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

相关文章:

  • AI遇见端动态神经网络:Cephalon(联邦学习+多模态编码)认知框架构建
  • 【MongoDB篇】MongoDB的集合操作!
  • 深入蜂窝物联网 第五章 EC-GSM-IoT 及其他技术:混合组网与前瞻
  • 玩玩OCR
  • 《阿里Qwen3开源:AI新纪元的破晓之光》
  • 2025年深圳软件开发公司推荐
  • 当向量数据库与云计算相遇:AI应用全面提速
  • 论文笔记-基于多层感知器(MLP)的多变量桥式起重机自适应安全制动与距离预测
  • 【C#】.net core6.0无法访问到控制器方法,直接404。由于自己的不仔细,出现个低级错误,这让DeepSeek看出来了,是什么错误呢,来瞧瞧
  • 【网络原理】从零开始深入理解HTTP的报文格式(一)
  • 缓存分片哈希 vs 一致性哈希:优缺点、区别对比及适用场景(图示版)
  • 【论文阅读】Partial Retraining Substitute Model for Query-Limited Black-Box Attacks
  • 【工具】Elasticsearch:强大的开源搜索与分析引擎
  • 区块链最佳框架:Truffle vs Hardhat vs Brownie
  • 技术赋能与模式重构:开源AI大模型驱动下的“一盘货”渠道革命——基于美的案例与S2B2C生态融合的实证研究
  • 一文简单记录打通K8s+Kibana流程如何启动(Windows下的Docker版本)
  • 第十六届蓝桥杯 2025 C/C++组 破解信息
  • 【运维】使用 DataX 实现 MySQL 到 PostgreSQL 的数据同步
  • SQL命令一:SQL 基础操作与建表约束
  • 从车道检测项目入门open cv
  • 荆州市委书记汪元程:全市各级干部要做到慎微、慎初、慎独、慎友
  • 蔡澜回应“入ICU观察”称未至于病危,助理:只是老毛病
  • 石家庄:城市更新,生活向美
  • 金科服务:大股东博裕资本提出无条件强制性现金要约收购,总代价约17.86亿港元
  • 一季度我国服务进出口总额19741.8亿元,同比增长8.7%
  • 哈马斯同意释放剩余所有以方被扣押人员,以换取停火五年