数据库的关系运算&集合运算

目录

传统的关系运算:

0.相容性:

1.并:

2.差:

3.交:

4.笛卡尔积:

图例:

专门的关系运算:

选择:

 投影:

连接:

自然连接: 

原理分析:

除:

原理分析:

例题:

题解:

1)

答案:

2)

答案:

3)

答案:

4)

 答案:

5)

答案:

6)

答案:

7)

答案:

8)

答案:

9)

答案:



 

传统的关系运算:

0.相容性:

  • 设给定两个关系 R,S,若满足:
  • 具有相同的列数(或称度数)n;
  • R中第i个属性和S中第i个属性必须来自同一个域(列同质)。
  • 则说关系R,S是相容的。
  • 除笛卡儿积运算外,其他的集合运算要求参加运算的关系必须满足上述的相容性定义。

1.并:

关系 R 和关系 S 的并运算结果由属于 R 或属于 S 的元组组成即 R和S的所有元组合并,删去重复元组,组成一个新关系,其结果仍为n元关系。 

R∪S={t|t∈R∨t∈S}

对于关系数据库,记录的插入和添加可以通过并运算实现。

2.差:

 关系R 与关系S的差运算结果由属于R 而不属于S的所有元组组成即 R 中删去与 S 中相同的元组,组成一个新关系,其结果仍为 n 元关系。


R-S={t|t∈R∧₇t∈S}

可实现关系数据库记录的删除 

3.交:

关系 R 与关系 S的交运算结果由属于 R 又属于S的元组即R与S中相同的关系,其结果仍为 n 元关系。

R ∩ S={t|t∈R∧t∈S}

两个关系的并运算也可以使用差运算进行表示:

R ∩ S = R - (R - S) 

4.笛卡尔积:

两个分别为 n 元和 m 元的关系 R 和S 的广笛卡儿积是一个(nm)列的元组的集合,元组的前n列是关系R的一个元组,后 m 列是关系S的一个元组。若R有个元组,S有k,个元组,则关系R和关系S的广义笛卡儿积有 k;xk个元组。

 

图例:

专门的关系运算:

专门的关系运算:选择,投影,连接,除。

 

选择:

 

  • 选择是对行的选中,选中满足条件的哪一行,是一种行的操作

 投影:

  • 投影是对选中列的选取,是一种列的操作 

连接:

  • 连接分为自然连接和等值连接。
  •  自然连接一定是等值连接,但等值连接不一定是自然连接
  • 等值连接要求相等的分量,不一定是公共属性,而自然连接要求相等的分量必须是公共属性.
  • 等值连接不把重复的属性除去:而自然连接要把重复的属性除去

自然连接: 

 

原理分析:

  1. 使用自然连接的前提条件是两个关系中必定有相同的部分,也就是某列中的某个属性相同,如图所示,关系R中B列的属性值b和a 在关系R中的B列中存在。
  2. 然后借助关系相同的属性值作为桥梁链接点,进行连接组合。
  3. 自然连接是对列属性的选取,之后再对列中被选中的属性值所在的行进行连接操作。 

除:

 

  • 在除中,我们默认被除数是  被   除数包含的,或者说,被除数的属性值和表头,要在除数中存在。

原理分析:

  1. 如果R÷S ,那么我们默认S的内容是在R中存在的
  2. 我们在关系R中删去含有关系S的表头,以及那一列
  3. 在关系R的每一个元组(行)中,含有关系S 元组 的  元组取下,进行对比。
  4. 对比这些取下的 元组 是否 完全 包含 过  关系S 的元组 ,如果有则就是R÷S的结果。  
  5. 除是对列的删除和行的选取操作!记住有先后顺序,先删除在选取。 

例题:

题解:

1)

  • 思路:目标是通过程军老师  最终结果是课程号和课程名,需要寻找老师和课程之间的关系。
  • 解答:因为老师名字和课程号、课程名再同一个表格中,所以我们先使用选择,将  程军老师  所在的哪一行进行选取,然后再使用投影操作,将程军老师 教授的课程号和课程名进行投影选取

答案:

 

2)

 

  • 思路:选择条件是年龄大于21的 男的  结果是学生学号和姓名,需要再学生关系中查找和条件相关的。
  • 解答:因为是学生关系内部的筛选,所以使用选择,将符合条件的筛选出,又因为结果要是学号和姓名。所以使用投影,将对应的学号和姓名选取。

 

答案:

 

3)

题目大意:检索 选择了 程军 老师课程的 学生姓名

  • 思路:条件是 程军老师  最终结果是 学生姓名,需要找到老师和学生之间的关系,而在三个关系表中,我们可以通过选取老师,得出老师教授课程的课程号
  • 同时投影出SC (学生和课程关系,下文都称SC) 中的学号和课程号,并且除去我们得出的 程军老师教授课程的课程号(结果是学生姓名,和课程号无关,所以使用除法除掉删去)
  • 之后,我们便得出了,上了程军老师课程的学生学号,再使用连接,连接学生关系 S(如果使用除法可能会出现一个学生姓名要包含多个学号才能被筛选出的情况) ,进行筛选,筛选出符合条件的行,然后投影出学号

答案:

 

4)

 

  • 思路:条件是李强同学,最后结果是课程号,所以需要寻找李强和课程之间的关系,再图中,可以使用SC关系中的 学生学号和课程号来进行相关的操作,其次这里的不学某个课程,其实是传统运算符中的不属于,所以可能需要使用传统运算符
  • 题解:因为选择的条件是李强同学,所以使用选择 选取李强同学所在的元组,其次因为SC中有着学生学号和课程号的关系,所以使用连接,选取出李强同学学习的 课程 的课程号 再SC中所在的哪一行 ,然后投影出来。
  • 因为最终结果是要求去除李强同学学习的课程号,所以我们使用 差 将李强同学的课程号再课程号中删除。

 

 答案:

5)

 

  • 思路:条件是全部的学生,最终结果是课程号和课程名,所以找学生和课程号课程名之间的关系,再图中的SC关系,可以通过学生学号进行操作
  • 题解:因为我们寻找的是学生都学习的课程,再SC中,学生可以用学号表示,课程可以用课程号表示,所以我们先投影SC关系中的学号和课程号,同时投影学生关系S中的学生学号
  • 在使用除,将SC投影出的关系除去S投影的关系,利用学生号和除的特点,只有都包含过全部学生学号的课程号才能留下
  • 最后使用留下的课程号对课程关系表C进行连接,利用连接的特点,将课程号作为链接点,筛选出该课程号再课程关系C中所在的元组,然后投影该元组的课程号和课程名

 

答案:

 

6)

 

题目大意:检索 上了程军老师所有课程的  学生 的学号  

  • 思路:条件的程军老师,最终结果是学生学号,所以需要寻找的是程军老师和学生学号之间的关系 
  • 题解:使用选择 进行条件选取,选取程军老师 之后通过投影将程军老师的课程号投影出来,之后使用SC表利用除的特点,将包含了所有筛选出来的课程号  的  元组挑出,并投影出学号。

答案:

 

7)

  • 思路:条件是 全部课程 ,最终结果是学生姓名,寻找课程和学生姓名之间的关系,学生姓名可以用学号作为媒介,全部课程可以用课程号进行连接,通过SC关系的课程号。
  • 解题思路:取出关系C中的所有课程号,在使用SC表投影课程号和学号,使用除,将SC投影的课程号和学号除去C投影出来的课程号,利用除的特点,将包含了 所有课程的学号筛选出,然后利用连接的特点,找到共同点,连接S关系,最后投影名字

答案:

 

8)

 

题目大意: 找跟2号学生选课一样的人的学号 

  • 思路:条件2号学生选的课程,最终结果是学号,可以通过二号学生的学号再SC关系中找到对应的课程号,再通过这个课程号进行筛选,当然筛选包含了学号2学生的学号。

题解:

  1. 选择2号学生的学号进行学号的投影,然后使用连接作为共同点再SC中进行筛选,找出课程号,再使用SC关系除去选出来的课程号,以此找出所有包含了这些课程号的学生号,然后再投影学生号。
  2. 或者再SC中投选择了2号学生学号后,对学号对应的课程号进行投影得出2号学生学的课程号,之间将SC投影出学生号和课程号,然后除去之前选出来的课程号,得出最后的结果

答案:

 

9)

 

  • 思路:条件是课程名字是C语言,最终目标是学生学号和姓名,可以使用选择和投影将C语言对应的课程号弄出,然后再SC表中进行 连接,找到共同点进行筛选,然后再投影学号,再连接找到S表中的对应部分,最后投影
  • 题解:选择C语言课程表所在的哪一行选出,并投影他的课程号,再用课程号对SC表进行连接,找到共同点,并投影出对应的学号,然后在使用学号连接到S关系,找到共同点投影学号和学生姓名

答案:


评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值