首页 > 编程知识 正文

关系代数的运算顺序,数据库中关系代数运算

时间:2023-05-03 09:48:30 阅读:162847 作者:4553

文章目录数据库关系代数1 .传统关系运算2 .专业关系运算2.1关系运算中的基础概念2.2组连接2.3象集(除法的重要工具) )。 3数学运算3.1并行运算3.2差分运算3.3正交运算3.4笛卡尔乘积(万能运算) 4.1表格概要4.2选择) Selection )4.2.1选择查询)例1 )4.2.2选择查询)例2 )4.2.3选择查询) 4.3投影

关系代数1 .传统关系运算

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

笛卡儿积运算差运算交叉运算2 .专用关系运算数据库特有的运算规则

选择投影连接除法2.1的关系运算中的基础概念学习关系代数时,脑子里必须始终有表和表的参数。 表如下。

例如,我们都看过成绩单。 请记住以下比喻

r (关系模型)是表)成绩单)。

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

t为了某个同学

t [Ai]为某个同学的某一门成绩

例如,r期间的考试班全体的成绩单,R[A1,A2,A2…Ai]表示考试的所有科目,t表示fkdwl这个人,t[Ai]表示fkdwl的某节课的考试成绩。

a不再是单独的属性,a可以表示一个或多个属性t[A],a不再是单独的属性成分,a可以表示几个属性,t[A]是可以表示几个属性成分的比喻,a不再是单独的,a 可以看作是某个同学的多项成绩,而不是某个同学的一项成绩,具体看a代表了多少学科a。 (横在头上……) )表示通过除a所代表学科以外的所有学科2.2元组的连接得到的该元组具有以下属性

前m个分量来自r表的一个m组,后n个分量来自s表的一个n组,给出了2.3象集(除法的重要工具)是关系r ) x,y ),x和y表示一个属性组,即x和y都是属性

从上面的例子来说,当x是成绩单一的课程成绩或多门课的成绩,y也是一门课的成绩或多门课的成绩t[X]=x时, x在r上的象集属于:Yx={t[Y] | t,t[X]=x

3数学运算3.1并行运算是可以使用并行运算的两个前提:

两个表的根源相同(两个表的行数相同)相同的属性来自同一字段(属性相同)的图,合并后怎么样? 与两个原始表合并后的新表的原始数量相同)列数相同)。

如果两个表之间有重复的元组,并且要重新处理运算,则集合之间的并集3.2的差运算类似于两个假设:可以使用差运算。

两个表的列数相同,两个表的属性相同,两个表进行差分运算后仍为n列

S-R表:如果s表中有与r表相同的组,s表去掉该组

R-S表:如果r表具有与s表相同的元组,r表将删除此元组

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

3.3交叉运算可用于交叉运算的两个前提:

表中行数相同的表的所有属性都将在同一个两个表中并行计算。 也就是说,找到两个表中的相同元素,在两个表中查找共性

3.4笛卡儿积(万能运算)没有任何使用限制,万物可以笛卡儿积。

((r表) n元关系,k1组) k1行,n列) ) ) ) ) ) ) ) ) ) ) )。

s ) m元关系,k2个组(k2行,m列) ) ) ) ) ) ) ) ) ) ) ) ) )。

r表和s表直积

(m n )原,要得到k1 * k2列的新表,请执行以下操作:

两个表进行笛卡儿积运算后

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

4 .关系运算关系代数整体学习需要使用学生课程选择数据库,需要熟悉下表

4.1表概要Student表:

Course表:

SC表:

4.2选择(Selection )选择也称为限制选择,选择作为对象的组,选择满足条件的组的结果为一行

4.2.1选择查询(例1 )信息类(IS )查询全体学生的信息

信息系

/strong>在Student表格中有,所有我们的R表的位置是Student

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

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

所以题目的答案为:

查询出来的结果为:

4.2.2 选择查询(例2)

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

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

所以题目的答案为:

查询出来的结果为:

4.2.3 选择查询(练习题) 查询性别为女生的学生信息查询学分等于四分的课程信息查询CS系的学生信息

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

4.3 投影(Projection)

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

这里就需要投影运算

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

4.3.1 投影查询(例1)

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

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

题目的答案为:

Sname 和 Sdept之间用逗号分隔

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

4.3.2 投影查询(例2)

查询学生表Student中有那些系

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

题目答案为:

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

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

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

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的象集(每个学生分别都选了些什么课)

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

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

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

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

4.5.2 例题

S表 :

C 表:

SC 表:

题目如下:

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

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

答案:

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


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

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

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

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

❤️完结撒花❤️

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。