当前位置: 首页 > 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

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

在这里插入图片描述

http://www.xdnf.cn/news/205903.html

相关文章:

  • docker desktop汉化
  • 价值投资笔记:企业护城河——虚假陷阱与隐性壁垒的深度解析
  • Git 操作命令
  • JavaScript性能优化实战
  • [Android]导航栏中插入电源菜单
  • Go 语言中的 `os.Truncate` 函数详解
  • 2025年4月最新Cursor续杯详细步骤
  • 分治而不割裂—分治协同式敏捷工作模式
  • 若依后台管理系统-v3.8.8-登录模块--个人笔记
  • HarmonyOS NEXT 诗词元服务项目开发上架全流程实战(二、元服务与应用APP签名打包步骤详解)
  • 【工具】Elasticsearch:强大的开源搜索与分析引擎
  • 通信协议:数字世界的隐形语言——从基础认知到工程实践-优雅草卓伊凡
  • Uniapp:设置TabBar
  • HarmonyOS ArkUI安全控件开发指南:粘贴、保存与位置控件的实现与隐私保护实践
  • Android项目中使用ComposeUI
  • GTC Taipei 2025 医疗域前瞻:从AI代理到主权生态,解码医疗健康与生命科学的未来图景
  • DeepSeek提示词技巧
  • 如何防止 ES 被 Linux OOM Killer 杀掉
  • uniapp 支付宝小程序自定义 navbar 无效解决方案
  • 区块链密码学核心
  • 海外社交App的Web3革命:去中心化社交与Token经济实战指南
  • GAEA商业前景和生态系统扩展
  • MongoDB的下载安装与启动
  • 【Linux】服务自启动设置的方式
  • 【计算机网络】面试常考——GET 和 POST 的区别
  • 强化学习之基于模型的算法之动态规划
  • Windows 10系统中找回MySQL 8的root密码
  • stm32 g031g8 flash擦除函数被坑
  • 从SOA到微服务:架构演进之路与实践示例
  • Docker 仓库管理