目录
一、前言
二、简单的关系运算(并、交、差)
并(Union):
交(Intersection):
差:
三、复杂的关系运算(笛卡尔积、自然连接)
一、笛卡尔积的数学定义
二、关系运算中的笛卡尔积
1.笛卡尔积是什么:
2.如果两个关系有同名属性怎么计算笛卡尔积?:
三、自然连接运算
自然连接的计算方法:
四、外连接
左外连接:
右外连接:
全外连接:
一、前言
不情不愿,不知不觉,又上完了了一节数据库与软件工程,今天让我们来看看关系运算,关系运算就是参与计算的元素都是关系的运算(关系在关系运算中就像是1+2=3里面的数字一样),今天的重点是讨论笛卡尔积这个有些复杂的概念,和笛卡尔积类似的,可以说是源于笛卡尔积的自然连接。我们肘~
二、简单的关系运算(并、交、差)
并(Union):
并,写作U。
在了解并的作用之前,我们先来了解一下它的使用前提条件:两个关系需要有相同的关系模式!
相同的关系模式就如R1的关系模式是R1(ID,姓名,学号),则R2的关系模式也必须为R2(ID,姓名,学号),即两个关系的属性名的集合相同。
求并就是将两个关系的元组合起来,有重复的就保留一个。
下面是一个求并的例子:
R1
ID |
性别 |
姓名 |
1 |
男 |
小明 |
3 |
女 |
小小美 |
R2
ID |
性别 |
姓名 |
1 |
男 |
小明 |
2 |
女 |
小美 |
则R1UR2为(可见重复的元组(1,男,小明)只保留了一个):
R1UR2
ID |
性别 |
姓名 |
1 |
男 |
小明 |
2 |
女 |
小美 |
3 |
女 |
小小美 |
交(Intersection):
交,写作∩。
在了解交的作用之前,我们也来了解一下它的使用前提条件:两个关系需要有相同的关系模式!
我们可以看到交的前提条件跟并一样,这里就不多写了hh。
R1∩R2就是保留R1与R2中都有的元组。
下面是一个求交的例子:
R1
ID |
性别 |
姓名 |
1 |
男 |
小明 |
3 |
女 |
小小美 |
R2
ID |
性别 |
姓名 |
1 |
男 |
小明 |
2 |
女 |
小美 |
则R1∩R2为,因为R1与R2都有元组(1,男,小明):
差:
差,写作-,可以抽象的理解成减号。(也就是R1-R2不等于R2-R1)
正所谓技能都有前摇,在了解差的作用之前,它的使用前提条件还是那个:两个关系需要有相同的关系模式!
R1-R2就是从R1中删去R2中有的元组。
下面是一个求差的例子:
R1
ID |
性别 |
姓名 |
1 |
男 |
小明 |
3 |
女 |
小小美 |
R2
ID |
性别 |
姓名 |
1 |
男 |
小明 |
2 |
女 |
小美 |
则R1-R2为,因为R1中删去R2有的元组(1,男,小明):
三、复杂的关系运算(笛卡尔积、自然连接)
复杂是我自己加的形容词,因为很难懂。。。
一、笛卡尔积的数学定义
笛卡尔积在数学中为两个集合的笛卡尔积,集合S1与集合S2的笛卡尔积记作S1XS2,表示第一个对象为S1成员第二个对象为S2成员的所有有序对。
上面的定义有点晕,来看个例子吧:
假设集合A={0, 1},集合B={a, b, c},则两个集合的笛卡尔积为{(0, a), (0, b), (0, c), (1, a), (1, b), (1, c)}。
二、关系运算中的笛卡尔积
1.笛卡尔积是什么:
我们可以把关系看作集合,元组看作元素,如r1的关系模式为(ID,姓名),r2的关系模式为(性别),当r1为{(1,小明),(2,小美)},r2为{(男),(女)},r1与r2的笛卡尔积就为{(1,小明,男),(1,小明,女),(2,小美,男),(2,小美,女)}
r1Xr2的关系模式为(ID,姓名,性别)
R1XR2的结果就是R1中的元组排在前面,R2中的元组排在后面进行组合产生的的所有元组的集合。
2.如果两个关系有同名属性怎么计算笛卡尔积?:
如A的关系模式为(a,c),B的关系模式为(a,d),则AXB的关系模式按照上方规则为(a,c,a,d)
有两个属性名冲突了。
我们要利用更名规则给属性名改名。
结果的关系模式应该为(A.a,c,B.a,d),重复的属性用 关系名.属性名 重命名,以实现区分。
三、自然连接运算
(这是个规则复杂的运算啊,写到这里,作者在阳台看了十分钟风景以下定决心)
看了笛卡尔积,你就会开始怀疑,它到底有什么用?大部分情况下像是创造一堆无用的元组,但是——有些元组还是很有用的,比如(1,小明,男)。(像是(2,小美,男)可能就有些违和感)
所以还要在两个关系笛卡尔积的元组中选择一些好的。连接就是一个先计算笛卡尔积,再选择的过程。(当然更直观来说,连接就是 比如把ID相同的元组连在一起,比如(1,小明)和(1,175)),连接之后变成(1,小明,175)——本括号中内容不严谨,但是对于理解很有帮助)
连接,英文叫 join,符号为.
我们用表示自然连接。
自然连接的计算方法:
连接有两种计算方法,它们是等效的。第一种我个人认为更直观,第二种是上方的教科书方法。
将用例子来说明:
我们有如下两个关系,我们来计算R1R2。
R2
体重 |
姓名 |
身高 |
110 |
小刚 |
189 |
123 |
小美 |
192 |
123 |
小美 |
170 |
1.找到两个关系的共有属性
这里是(体重,姓名)
2.将共有属性完全相同的元组进行连接得到两个关系自然连接的结果
注意:是共有属性完全相同 即体重和姓名完全相同,小明小刚体重相同但是名字不同故不连接。
可以一连接多,只要共有属性完全相同,如这里的(123,小美)连接了右边的两个。
连接后相同的属性只保留一个
R1R2结果如下(只保留一个体重和一个姓名):
体重 |
姓名 |
身高 |
123 |
小美 |
192 |
123 |
小美 |
170 |
四、外连接
外连接(outer-join)是连接的扩展。外连接有三种,左外连接,右外连接,全外连接。
左外连接:
左外连接的结果就是在自然连接运算的结果的基础上,加上左侧元组中的没有与右侧元组匹配过的元组加上来自右侧关系的属性并且都置空形成的元组。
用上方例子而言:
最右侧关系为左外连接的结果,可见在R1R2中(110,小明)在自然连接时没有参与连接,又在左侧,于是给他加上来自右侧关系的身高属性,并且赋值null,加入结果中。
右外连接:
右外连接的结果就是在自然连接运算的结果的基础上,加上右侧元组中的没有与左侧元组匹配过的元组加上来自左侧关系的属性并且都置空形成的元组。
简单而言就是与左外连接相反,这里由于R1没有相对于R2的额外属性,故直接加上小刚即可。
全外连接:
R1与R2进行全外连接就是 两者左外连接的结果∪两者右外连接的结果