数据库关系代数详解

article/2025/10/7 2:17:21

文章目录

  • 数据库关系代数
    • 1. 传统的关系运算
    • 2. 专门的关系运算
      • 2.1 关系运算中的基础概念
      • 2.2 元组的连接
      • 2.3 象集(除法运算重要工具)
    • 3 数学上的运算
      • 3.1 并运算
      • 3.2 差运算
      • 3.3 交运算
      • 3.4 笛卡尔积(万能运算)
    • 4. 关系运算
      • 4.1 表格简介
      • 4.2 选择(Selection)
        • 4.2.1 选择查询(例1)
        • 4.2.2 选择查询(例2)
        • 4.2.3 选择查询(练习题)
      • 4.3 投影(Projection)
        • 4.3.1 投影查询(例1)
        • 4.3.2 投影查询(例2)
        • 4.3.3 选择和投影配合使用(重点)
      • 4.4 连接(Join)
        • 4.4.1 一般连接(例题)
        • 4.4.2 等值连接
        • 4.4.3 自然连接(特殊的等值连接)
        • 4.4.4 外连接
        • 4.4.5 例题
      • 4.5 除运算
        • 4.5.1 除运算基本概念
          • 4.5.2 例题

数据库关系代数

1. 传统的关系运算

传统的关系运算起源于数学的集合论

  1. 笛卡尔积运算
  2. 差运算
  3. 交运算
  4. 并运算

2. 专门的关系运算

数据库中特有的运算规则

  1. 选择
  2. 投影
  3. 连接
  4. 除运算

2.1 关系运算中的基础概念

在学习关系代数的时候,脑海中要时刻拥有一张表格,还有表格的一些参数,表格如下:

比如说我们每个人都见过成绩单,牢记以下的比喻

  • R(关系模式)就是一张表格(成绩单)。

  • R[A1, A2, A3,…Ai] = R[语文,英语,数学……学科]

  • t 为某个同学

  • t [Ai] 就可以当作某个同学的某一门成绩

例如:R为期中考试全班的成绩单,R[A1, A2, A2…Ai]为考试所有科目,t 代表了张三这个人,t[Ai]代表了张三某门课程的考试成绩。

  • A不再是单独的一个属性,A可以代表一个或者多个属性
  • t[A]也不再是单独的某个属性分量,A代表多少个属性,t[A]就可以代表多少个属性分量
  • 做一个比喻,A再也不单独是某个学科,而是可以代表一科或者多科学科
  • t[A]也就不当作某个同学的一门成绩,而是可以当成某个同学的多门成绩,具体看A代表了多少学科
  • A头上一横……)就代表了除了A代表的学科以外的所有学科

2.2 元组的连接

通过连接得到的这个元组有以下属性

  • 前 m 个分量来自于 R 表中的一个 m 元组
  • 后 n 个分量来自于 S 表中的一个 n 元组

2.3 象集(除法运算重要工具)

给了我们一个关系R(X,Y)XY都代表了一个属性组,也就是XY都是属性的数量都是一列到多列

  • 从上面的比喻来说,X是成绩单一门课程的成绩或者多门课程成绩,Y也是一门课程的成绩或者多门课程的成绩
  • t[X] = x时: xR中的象集为:Yx = {t[Y] | t 属于 R, t[X] = x}
  • 公式比较难懂,但是其实本身很简单也十分容易寻找

如下例:

3 数学上的运算

3.1 并运算

能够使用并运算的两个前提

  1. 两张表格的元一样(两张表格列数一样)
  2. 相同的属性取自同一个域(属性都一样)

如图,在合并了之后呢,两个原始的表格和合并之后的新表格元数一样(列数一样)

  • 如果两个表之间有重复的元组,并运算会做去重处理,类似于集合的之间的并集

3.2 差运算

能够使用差运算的两个前提

  1. 两个表格列数一样
  2. 两个表格的属性都相同

两个表进行了差运算之后,都仍然是n列

S-R表:S表中有任意一个元组和R表的一样,S表就去掉这个元组

R-S表:R表中有任意一个元组和S表的一样,R表就去掉这个元组

简言之:就是一张表,嫌弃另外一张表,我身上有那里和你一样,我改还不行嘛!

3.3 交运算

交运算能够使用的两个前提

  1. 表格的列数相同
  2. 表格的属性都相同

两个表格进行并运算,就是把两个表格中一样的元素找出来,找出两张表格的共性

3.4 笛卡尔积(万能运算)

没有任何使用限制,万物皆可笛卡尔积。

R表n元关系,k1个元组(k1行,n列)

S表m元关系,k2个元组(k2行,m列)

R表S表进行笛卡尔积

得到一个(k1 * k2)元(n + m)列的新表,如下:

两个表进行了笛卡尔积运算之后

以上就是所有的数学关系代数运算

4. 关系运算

整个关系代数的学习需要使用学生课程选课数据库,需要熟悉以下表格:

4.1 表格简介

Student表:

Course表:

SC表:


4.2 选择(Selection)

  • 选择也称之为限制
  • 选择是针对的元组进行选择,选择出满足条件的元组

选出来的结果是一行行的

4.2.1 选择查询(例1)

查询全体信息系(IS)的学生所有信息

  1. 信息系在Student表格中有,所有我们的R表的位置是Student

    Student表格的属性集合为{"Sno", "Sname", "Ssex", "Sage", "Sdept"}

  2. 我们需要的条件是F(Sdept = IS)

所以题目的答案为:

查询出来的结果为:

4.2.2 选择查询(例2)

查询年龄小于20岁的学生所有信息

  1. 年龄在Student表格中存在,所以我们现需要查询的表格为Student表格
  2. 我们需要的条件是年龄小于20岁F(Sage < 20)

所以题目的答案为:

查询出来的结果为:

4.2.3 选择查询(练习题)

  1. 查询性别为女生的学生信息
  2. 查询学分等于四分的课程信息
  3. 查询CS系的学生信息

总结:选择运算是查询符合条件的行


4.3 投影(Projection)

我们可以看见,使用选择运算的时候,一行的所有全部信息我们都获取了,比如我查询了小于20岁的学生信息,我连学生的名字,学号,性别所有的信息都知道了,因为选择是选择出一行一行的结果,那么如果我只想知道小于20岁的学生名字,其他学号,学院等等的信息我都不想知道

这里就需要投影运算

投影运算是针对属性进行选择的运算,也就是投影是选择出符合条件的一列,并且会自动取消某些行(后面会举例说明)

4.3.1 投影查询(例1)

查询学生的姓名和学生的系,从需要查询的这个条件可以看出来我们需要查询的是姓名列和学生所在系列

  1. 学生的姓名和所在系在Student表格中,所以我们需要在Student表格中进行查询
  2. 需要查询的属性为学生的姓名和学生的系

题目的答案为:

Sname 和 Sdept之间用逗号分隔

最终我们查询获取的答案如下:

4.3.2 投影查询(例2)

查询学生表Student中有那些系

  1. 首先,我们需要在Student表中进行查询
  2. 我们需要查询的属性为系

题目答案为:

可是我们最终查询出来的答案应该是什么样子的呢?

图中演示的就是选择运算的自动去重功能

总结:投影查询得到的是一列

4.3.3 选择和投影配合使用(重点)

选择查询是挑选出符合条件的行,投影查询是选择想要的列,那么如果想定位到一个具体的属性,就需要两种查询方式一起使用。

如图:

当我们需要全体数学学院的学生姓名,注意,只需要学生的姓名,其他的信息都不需要。

  • 先用选择运算将所有的数学学院的学生挑选出来

选择运算的基础上,把需要符合条件的姓名通过投影运算查询出来

全体数学学院的学生的姓名(交叉区域):言小白,李白。


4.4 连接(Join)

连接的含义:从两个关系的笛卡尔积中选择属性之间满足一定关系的元组

解释:在两张表的笛卡尔积后得到的那张大表中再次选取一些符合我们条件的元组

多种符号:不同的连接方式对应的符号也有一些细微的差别

4.4.1 一般连接(例题)

一般连接就是条件连接,需要将两个表格按照条件连接起来

第一步:

第二步:

第三步:

因为所有需要挑选的元组都挑选完毕,所以最终的结果如下图

4.4.2 等值连接

等值连接是一种特殊的一般连接

  • 两个表需要有相同的属性列

下面通过具体的题目来进行了解

第三步:

最终的结果为:

4.4.3 自然连接(特殊的等值连接)

自然连接是一种特殊的等值连接

这里我们发现了等值连接的一个缺点,R.B和S.B属性是相等的,而我们只需要其中一列就可以,所以R.B和S.B属性只需要保留任意一列就可以了。

换句话说,等值连接因为属性重复而造成了额外的空间浪费,所以我们需要使用自然连接来解决这个问题(去掉重复的列)。

4.4.4 外连接

我们从自然连接中又发现了一个问题,如下图:

图中标记为红色的地方:

在做等值连接时由于彼此之间没有对应的元组(彼此之间特有的元组,我有的你没有,或者你有的我没有,这种情况肯定不会相等),在自然连接和等值连接的时候都会被丢弃,这种连接叫做内连接

而有时候我们需要保留一张表中这种特有的元组,这些元组不能被丢弃,所以需要使用与内连接相反的连接——外连接解决特有的元组被丢弃的问题

外连接:把R表和S表被丢弃的元组捡了回来,并且在最终连接的表中没有的值用NULL替代,最终结果如下

  • 左外连接:因为R表在左边,所以最终的结果只保留R表中被丢弃的特有元组S表的特有元组仍然丢弃
  • 右外连接:因为S表在右边,所以最终的结果只保留S表中被丢弃的特有元组R表的特有元组仍然丢弃

4.4.5 例题

很多时候需要查询的数据分布在两个表格甚至多个表格中,使用连接将表格连接在一起进行查询是十分常用的操作

有表格信息如下:

一、查询所有学生的学号,姓名,课程号以及成绩

  • 需要查询的信息分布 S 表和 SC 表中
  • 两张表拥有相同的属性,即Sno,所以连接条件就是 S.sno = SC.sno

答案:

当然,使用自然连接也是正确的,自然连接会自动找到相同的属性,并且默认条件就是相同属性的值相同,自然连接就是特殊的等值连接

二、查询CS系的学生的学号,课程号,以及成绩

  • 需要查询的信息分布在 S 表和 SC 表中
  • 两张表相同的属性是 Sno,所以依靠 Sno 将两张表连接
  • 需要对连接后的表格进行选择,条件是 Sdept = ‘CS’

答案:

其实这道题可以再优化一下

因为我们只需要 S 表中属于CS系的,没必要将 S 表的所有系的学生都和 SC 表连接起来
所以可以先把 S 表中 CS 系的学生挑选出来,然后再进行连接操作。

优化后的答案:

很明显优化后的结果挑选速度更快,占用空间更小。


4.5 除运算

一些学习上的感悟:除运算在关系代数中是一个十分强大的工具,但是除法运算的定义看起来十分的晦涩难懂,可定义又是十分重要的,相信很多人在看教科书的过程中,每次看定义这块的时候都会很懵,然后看了例子之后就会理解定义的意思,但是懂了定义的大意之后很少就会有人再回头去理解定义,例子固然是用来让我们可以清晰的理解定义的大意的,但是我们通过例子理解定义的大意之后,我们仍然要回归定义,只有这样我们才能学得深入(个人对于学习上的一些理解,欢迎一起交流)

4.5.1 除运算基本概念

假设我们手里面有一张数据库如下:

现在我们有一个问题,就是我们想要找出学习最积极的那位学生,也就是选修了所有课程的那个学生,先暂时放弃除法运算,以我们最朴素的情感用自己的逻辑来解决这道题目,按照自己的想法,就像设计一个程序一样,需要几步做出这个问题

以下是按照我自己的想法:

  • 首先,把SC表拆了,把每个学生单独做成一个表,如下:

  • 然后问题就变成了拆开之后的表格和C表一一比对,找出拆开之后的三个表格中的Course属性和C表一模一样(也就是拆开之后包含了所有课程的表),然后找出那个人是谁,然后问题就解决了

实际上,我们的除法运算就是这个逻辑,但是除法运算的更为严谨,以下是除法运算的的步骤(SC ÷ C),这里我们仍然采用我们上面使用的数据库,直接说结论(SC ➗ C)能找出答案

  • 第一步:找出C表中和SC表中相同的属性,也就是C属性,对C属性做投影操作(也就是找出总的课程有多少门)

  • 第二步:找出SC表中和C表不相同的属性,也就是S属性,也对S属性做投影操作(找出一共有几个学生)

  • 第三步:找出SC表中S的象集(每个学生分别都选了些什么课)

  • 最后一步就是进行比对,只有张三的象集包含了所有C表中的所有课程,所以(SC ➗ C = 张三)

简单的总结,当需要查询选取所有课程的学生的名单时

  • 需要获取所有的课程到底是那些课程,所以对C表进行投影
  • 需要获取选课的学生有那些,所以需要对SC表的S进行投影
  • 需要知道每个学生都选择哪些课程才能知道那个学生全选了课程,所以还需要的数据是SC表中,S的象集
  • 最后,需要进行比对操作,看看那个学生的象集包含了C表的投影

除法运算像一个函数,封装了以上的所有功能,我们调用这个函数的时候,把正确的参数放进去,就可以得到我们想要的答案

4.5.2 例题

S表 :

C 表:

SC 表:

题目如下:

查询选修了所有课程的学生姓名,年龄

  1. 对 C 表进行投影,找出所有的课程编号
  2. 用 SC 表 C表,找出选了C表中所有课程的学生
  3. 将符合条件的学生的姓名和年龄找出来

答案:

其中,第2步的除法运算详细过程如下:


当我们看完结论,做完题目,再回头看定义,除法运算的定义如下:

反复多理解几次,也想用自己的话解释定义,但是定义太抽象了,不举例很难说清楚。

……只可意会不可言传……如果使用例子无非把上面的例子再说一遍。

这里使用其他博客的对于除法运算的总结:RS÷S的意义就是:“在R和S的联系RS中,找出与S中所有的元组有关系的R元组”,这篇博客地址为:关系代数除法运算

❤️完结撒花❤️


2021/5/24:特别鸣谢ai_leilei指出本文错误之处,现已修改!


http://chatgpt.dhexx.cn/article/A77ZscX7.shtml

相关文章

数据库专门的关系运算

本文章用表 选择运算&#xff08;从行的角度运算&#xff09; 选择又称为限制&#xff0c;选择运算符的含义&#xff1a; 在关系R中选择满足给定条件的诸元组 投影&#xff08;从列的角度运算&#xff09; 投影运算符的含义&#xff1a;从表中选出若干属性列组成新的关系 注…

数据库关系代数运算之连接

联接有三种&#xff1a;θ联接和自然联接&#xff08;这里是算术比较符&#xff09;&#xff0c;外联接。 &#xff08;1&#xff09; θ联接 (从R和S的笛卡儿乘积中选取满足条件“iθj”的元组 •&#xff08;2&#xff09;自然联接&#xff08;naturaljoin&#xff09; 两个…

数据库关系代数中除运算讲解和SQL语句的实现

【数据库原理】关系代数篇——除法讲解 陈宇超 编辑总结: 除法运算的一般形式示意图 如何计算RS呢&#xff0c;首先我们引进”象集”的概念&#xff0c;具体意义看下面的陈述即可理解 关系R和关系S拥有共同的属性B、C , RS得到的属性值就是关系R包含而关系S不包含的属性&am…

关系代数基本运算 数据库

操作目录 关系代数的八种基本运算并交差笛卡尔积选择投影连接除总结 关系代数的八种基本运算 并 并&#xff0c;就是将两个或多个表并连起来&#xff0c;需要注意的就是在并的过程中&#xff0c;我们并不是直接一笼统地并起来&#xff0c;而且还要对相同的元祖进行合并&#x…

数据库系统概论----关系运算之除运算

这一周都在复习《数据库系统概论》这门课&#xff0c;看到关系运算的这一节时&#xff0c;对于除运算不是很理解。 通过百度&#xff0c;我觉得也没有得到比较容易理解的讲解。 这里呢&#xff0c;我就分享一下我的理解吧&#xff0c;如有差错的地方&#xff0c;还希望看到这…

数据库-----关系运算

关系数据库概述 相关术语 ◎在现实世界中&#xff0c;描述一个事物常常要抽取其若干特征来表示&#xff0c;这些特征称为属性&#xff0c;如用学号、性别、班级等来描述学生。每个属性的取值范围对应一个值的集合&#xff0c;称为属性的域&#xff0c;如性别的域是{男&#x…

数据库基础--关系代数中的除法运算

除法运算的定义&#xff1a; 这个概念的描述的非常抽象&#xff0c;刚开始学习的同学完全不知所云。这里通过一个实例来说明除法运算的求解过程 设有关系R、S 如图所示&#xff0c;求RS 的结果 求解步骤过程&#xff1a; 第一步&#xff1a;找出关系R和关系S中相同的属…

数据库的运算

数据库的运算可分为集合运算和关系运算。 一、集合运算 • 从关系的水平方向迚行&#xff1b; • 包括&#xff0c;幵、交、差、笛卡尔积运算。 • 幵运算&#xff08;R U S&#xff09;&#xff1a;可实现数据的揑入。 • 差运算&#xff08;R–S&#xff09;&#xff1a;主…

关系数据库:专门关系运算

专门关系运算有&#xff1a;选择&#xff0c;投影&#xff0c;连接&#xff0c;除运算。 1.选择从关系中找出满足给定条件的所有元组称为选择&#xff0c;其中条件是用逻辑表达式给出的&#xff0c;逻辑表达式为真时元组被选取。 选择运算记为δF&#xff08;R&#xff09;&am…

详解【数据库】关系代数基本运算

文章目录 五中基本的关系代数操作并&#xff08;Union&#xff09;差&#xff08;Difference&#xff09;广义笛卡尔积&#xff08;Extended Cartesian Product&#xff09;投影&#xff08;Projection&#xff09;选择&#xff08;Selection&#xff09; 连接等值连接自然连接…

数据库关系运算——除运算

书上给“除运算”的定义是&#xff1a; 设关系R除以关系S的结果为关系T&#xff0c;则T包含所有在R但不在S中的属性及其值&#xff0c;且T的元组与S的元组的所有组合都在R中。 我对此不是很理解。 直到看到这样的解读&#xff0c;方才恍然大悟&#xff1a;

【数据库】关系代数基本运算

前言 关系代数是以关系为运算对象的一组高级运算的集合。由于关系定义为属性个数相同的元组的集合&#xff0c;因此集合代数的操作就可以引入到关系代数中。关系代数中的操作可以分为两类&#xff1a;传统的关系操作&#xff0c;并、差、交、笛卡尔积&#xff08;乘&#xff09…

数据库原理之关系数据库关系运算

关系数据库关系运算 选择投影链接除运算 选择运算 选择运算是从关系R中选取使逻辑表达式F为 真的元组&#xff0c;是从行的角度进行的运算 投影运算 投影操作主要是从列的角度进行运算&#xff0c;但投影之后不仅取消可原关系中的某些列&#xff0c;而且还可能取消某些元组…

数据库之关系数据库的关系运算

关系运算的机理有什么用 我们学习关系运算的机理&#xff0c;对我们理解数据库查询操作非常重要 所以我们进行关系操作时很大程度上需要明白关系操作以及关系之间的逻辑 在我们进行数据库查询操作时&#xff0c;如何规范的使用数据库语言&#xff0c;如何进行选择时能够消除我…

数据库中的关系运算

1、和&#xff08;Union&#xff09;运算、针对行 针对两张具有相同属 性的表&#xff0c;将两者表合并起来&#xff0c;在合并过程中遇到重复的行保留一项就行了。 2、差&#xff08;difference&#xff09;运算、针对行 针对两张具有相同属 性的表&#xff0c;第一张表减去第…

数据库关系运算

专升本 数据库的关系运算 本文章是讨论数据库中的8种关系运算&#xff0c;分为传统的集合运算和专门的关系运算 传统集合运算 1&#xff1a;并运算U&#xff1a;将表拼接起来&#xff0c;且去掉重复记录&#xff08;同结构&#xff09; 2&#xff1a;交运算∩&#xff1a;取…

kafka消费模式

简介&#xff1a;kafka是一种消息队列&#xff0c;主要是观察者模式&#xff08;Obsever&#xff09;一个分布式的发布、订阅的消息系统&#xff0c;支持海量数据的数据传递&#xff08;高吞吐&#xff09;。Kafka将消息持久化到磁盘中&#xff0c;并对消息创建了备份保证了数据…

kafka 命令行操作大全

kafka 命令行操作大全 一、集群相关常用命令二、topic相关常用命令2.1 脚本&参数简介2.2 举例 三、生产者命令行常用操作3.1 脚本&参数简介3.2 举例发送消息 四、生产者命令行常用操作4.1 脚本&参数简介4.2 举例消费消息 这里主要讲命令行操作&#xff0c;如何安装…

Kafka版本讲解

1 文章背景 在维护一些老项目时候&#xff0c;总会听到 kafka 0.8版本,0.10版本&#xff0c;会感觉到很奇怪&#xff0c;为什么版本号 不是从1.0.0开始,本篇文档重点阐述一下kafka非主流的版本号 2 参考文章 Apache Kafka 3 个人理解 kafka对外发布第一个版本的时候版本号就不…

Kafka消费模式详解

美图欣赏&#xff1a; ​​​​​​ 一.Kafka是什么 在流式计算中&#xff0c;Kafka一般用来缓存数据&#xff0c;spark通过消费Kafka的数据进行计算。 1&#xff09;Apache Kafka是一个开源消息系统&#xff0c;由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目…