7.2 关系运算

简介: 7.2 关系运算

注:重点掌握投影,选择,自然连接,左外连接,右外连接,全连接,笛卡尔积,注意要理解除的概念和运用

细节是'2'与2的区别,元数与元组的区别

学习方法:根据本节脑子里形成知识点的思维导图,每个知识点对应的题目要熟练掌握。

基本的关系代数运算

1、并(Union)

• 关系R与S具有相同的关系模式,即R与S的元数相同(结构相同),关系R与S“并”

由属于R或属于S的元组构成的集合组成,记作R∪S,其形式定义如下:

基本的关系代数运算

2、差

• 关系R与S具有相同的关系模式,关系R与S的差是由属于R但不属于S的元组构成

的集合,记作R-S,其形式定义如下:



3、广义笛卡儿积

• 两个元数分别为n目和m目的关系R和S的广义笛卡儿积是一个(n+m)列的元组的集合。

元组的前n列是关系R的一个元组,后m列是关系S的一个元组,记作R×S。


4、投影及广义投影

• 投影是从关系的垂直方向进行运算,在关系R中选择出若干属性列A组成新的关系,记作 π A (R) ,其形式定义如下:

广义投影运算允许在投影列表中使用算术运算,实现了对投影运算的扩充。若有关系R,条件

F1,F2, … ,Fn中的每一个都是涉及R中常量和属性的算术表达式,那么广义投影运算的形式定义为

2、连接

• 分为 θ 连接、等值连接与自然连接

(1) θ 连接:可以由基本的关系运算笛卡儿积和选取运算导出

比较运算符,如>、<、=、 ≠ , X 和 Y 分别为R和S上可以进行比较的属性组。

小技巧:以R表中A列为基准

每次算笛卡尔积是很麻烦的,但是根据一些求值特点可以直接看出来,比如上图中R表中的A列要小于S表中的B列,如2<8.则可就是21468,3<8,就是34568,4<8.则就是46768,组成的三列就再把关系中的表名写上,如图所示:

除了等于,还可以大于,小于,同样没有必要求出来RXS,可以直接找R.A=S.C的

3)自然连接

是一种特殊的等值连接它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果集
中将重复属性列去掉。如果没有重复属性,那么自然连接就转化为笛卡儿积。即R.A=S.A,所有相同的属性都必须进行比较,图中的是R.A=S.并且是R.C=S.C,一般是去掉右边的。

具体求得时候:可以找到相同的属性列,去掉一个相同的属性,再找到有没有相等的

sql语句:select * from s,sc where s.xuehao=sc.xuehao

4:除

第一步:找出相同的属性列(本例中相同的是CD)

第二步:先载其中一个表找相同属性列的值(在s表中找到CD,两列的值是(c,d),(e,f)再在另外一个表找与(c.d),(e,f)相同的行,再找到和CD两列不同列的值,(本例中是A,B),而后看A,B两列对应两行的值是否相同,(本例中就是两列都是a,b)在R表中,两行(c,d)(e,f)对应的左边两行的值是相同的,就留下来。

若都么有一样的,那么结果就是一个空集

4、外连接:对连接运算的补充

• 外连接运算是连接运算的扩展,可以处理缺失的信息。

(1)左外连接 ⟕ (左侧为准,右侧填充)

• 取出左侧关系中所有与右侧关系中任一元组都不匹配的元组,用空值NULL填充所有来自右侧关系的属性,构成新的元组,将其加入自然连接的结果中。

首先求自然连接,然后以左边为准找到没有匹配的,右边的值用空值填充

本例中的表bc,de,都能匹配,但是ad,fg两行并没有匹配,则右边需要有空值

2)右外连接 ⟖ (右侧为准,左侧填充)类似左外连接

取出右侧关系中所有与左侧关系中任一元组都不匹配的元组,用空值NULL填充所有来自左侧关系的属性,构成新的元组,将其加入自然连接的结果中

1.自然连接,以右侧为基准

(3)全外连接⟗:分别求出左外连接和右外连接,而后求出它们的并集

前面三行是重复的,只需要添加上左外连接的后两行和右外连接的最后一行,去掉重复就可以了

总结:

注:在自然连接中,若没有相同的属性列,则就转化为了笛卡尔积

题目:

1 、 19 年第 39 题

给定关系 R ( A,B,C,D )与 S ( C,D,E,F ),则 R × S 与 R⨝S 操作结果的属性个数分别为( A )。

A. 8, 6 B. 6, 6 C. 8, 8 D. 7, 6

注:RxS是求笛卡尔积,需要把所有属性都写上,只需要在相同的属性前加上表名即可,所以是4+4=8.R⨝S自然连接需要去掉相同的属性CD是相同的,分别保留一个即可,就是4+4-2=6;

注:先自然连接,要求就是R.A=S.A R.C=S.C R.D=S.D,转换为笛卡尔积就是第1列=第5列,对应的就是1=5,其他的类似,中间是且的关系,R.C>S.F对应的列数就是第3列和第9列,注意'3'>'9'(数字3>数字9)和3>9(第3列大于第9列)的区别。投影出来,把不必要的给去除掉。注意自然连接要去除掉相同的属性列,投影的选项是去除掉相同列的,而选择的选项是没有去除掉相同列的(在选项中都是笛卡尔积)。

:先按照如下示例写出来,从右往左看,先自然连接,而后是A2<2017并且A4=95,再去进行投影,结果里就没有A2,A3列了,再看选项。排除错误答案。

      R               S

A1 A2 A3      A2 A3 A4  ---->自然连接--->A1 A2 A3 A4-->A2<2017且A4=95,--->投影运算-->A1,A4

A选项明显的错误,应该是并,不是或

B项是先进行A2<2017,A4=95的选择而后笛卡尔积,与题目中的先自然连接是不能等价的

此处应注意,自然连接要求两点1.两个表中有相同的属性,属性对应的值要相等。2.结果集合中要去掉重复的列。可举列子反驳。

C中S仅有3列,不可能有第6列。

D中有选择2=4并且3=5。类似自然连接中要求相同属性对应的值要相同。是正确的。

4 、 17 年第 54 题

有两个关系模式 R(A , B , C , D) 和 S(A , C , E , G) ,则 X=R × S 的关系模式是( C ) 。

A. X(A , B , C , D , E , G) B. X(A , B , C , D)

C. X(R.A , B , R.C , D , S.A , S.C , E , G) D. X(B , D , E , G)

注:笛卡尔积的运算

注:排除各个选项后,可得B是正确的

注:AC明显的错误,选择第2列大于第7列的笛卡尔积结果,但是自然连接后只有5列

'2'>'7'的意思是数字2大于数字7,不是第2列大于第7列

自然连接两要求:1.相同属性对应的值要相同。2,去掉相同属性其中的一列。留下的数值就是结果。

7 、 16 年第 48 、 49 题

关系数据库中通常包含多个表,表与表之间的关联关系通过( B )来实现,通过( D )运算将两个关联的表

合并成一张信息等价的表。

A. 指针 B. 外码 C. 索引 D. 视图

A. 选择 B. 投影 C. 笛卡尔积 D. 自然连接

注:

注:从右往左看,选择在S表中第1列的值小于对应第3列的值的行,如图1所示,而后对此结果,再进行投影,选择A1列和A2列,如图2所示,再用R除以它(除法:在本题中属性是A1,A2)对应的值是(2,1)(3,4)找到在R表中A1 A2对应的也是(2.1)(3,4)的两行,且右边A3对应的值是相同的,如图3所示)除后的结果就是4

图1

图2

图3

外连接:先求自然连接的结果(相同的属性,对应的值也是相等的)如图4所示

图4

左外连接:以左边为基准,把不在自然连接的结果给补齐,如图5所示,元组个数是4

图5

右外连接:以右边为基准,而后补齐,如图6,元组个数为4

图6

全外连接:左外连接和右外连接求并集,前两行是重复的,则是2+2+2=6个元组。

9 、 14 年第 36 、 37 题

给定关系模式 R ( A,B,C,D )和关系 S ( A,C,D,E ),对其进行自然连接运算 R⨝S 后的属性列为( B )个,与σ R.B>S.E ( R⨝S )等价的关系代数表达式为( B )。

(36) A. 4    B. 5    C. 6     D. 8

(37) A. σ 2>8 ( R × S )

B. π 1,2,3,4,8 ( σ 1=5 ∧2>8 ∧ 3=6 ∧ 4=7 ( R × S ))

C. σ '2'>'8' ( R × S )

D. π 1,2,3,4,8 ( σ 1=5 ∧’2‘>’8‘ ∧ 3=6 ∧ 4=7 ( R × S ))

注:好好学习

10 、 12 年第 41~44 题

假设关系 R1 、 R2 和 R3 如下所示:

若进行 R1⨝R2 运算,则结果集分别为( B )元关系,共有( A )个元组;若进行 R2 × σ F<4( R3 )运算,则结果集为( D )元关系,共有( A )个元组。

(41)A.4    B.5     C.6     D.7

(42)A.4    B.5    C.6     D.7

(43)A.5     B.6     C.7     D.8

(44)A.9     B.10    C.11    D.12

注:

11 、 11 年第 30~32 题

若集合 D1={0,1,2} ,集合 D2={a,b,c}, 集合 D3={a,c} ,则 D1 × D2 × D3 应为( A )元组,其结果集的元组个数为( D )。若 D1 ×( D2⨝D3 ),则结果集的元组个数为( C )。

(30) A.3   B.6    C.8     D.9

(31) A.6    B.9    C.12   D.18

(32) A.2    B.3     C.6    D.9

注:三个集合对应的图为:

若是:D1={(0,1,2),(1,3,4)}对应的就是

三列求对应的笛卡尔积,则对应的元组个数就是3,他们3个求笛卡尔积,有3列,是3元关系

注意元数与元组的区别。元组个数,就是求有几行,就是3x3x2=18

D2和D3的1=1的意思是,D2和D3进行笛卡尔积,而后求两列相同的值

图所示为笛卡尔积和1=1,求相同的值

在于D1求笛卡尔积,求元组个数,则为6个


相关文章
|
6月前
|
程序员 C++
10关系运算和逻辑运算
10关系运算和逻辑运算
38 0
|
算法 C语言
算数、赋值、单目操作符介绍
算数、赋值、单目操作符介绍
69 0
|
6月前
|
C++
C++程序中的关系运算
C++程序中的关系运算
55 1
|
5月前
|
Go
go算数运算、关系运算、布尔运算、位运算
go算数运算、关系运算、布尔运算、位运算
|
6月前
|
存储 程序员 C++
|
6月前
|
C语言
自增自减运算符
自增自减运算符
50 4
|
6月前
|
C语言
C语言自增减、逻辑运算、位运算、位移运算及三目运算操作
C语言自增减、逻辑运算、位运算、位移运算及三目运算操作
48 0
|
11月前
指针的算数运算
指针的算数运算
38 0
|
11月前
指针的运算
指针的运算
40 0
|
编译器 C++
移位操作符与位操作符详解
移位操作符与位操作符详解
109 0