上一节,我们学习了关系模型,其中关系操作我们只是一带而过。本章我们将进行详细的介绍。
关系操作是基于关系代数语言实现的。
关系代数是对关系进行集合代数运算,是基于关系代数的操作语言,称为关系代数语言,简称关系代数.
关系代数的运算对象是关系,运算结果也是关系.
本节内容也可以参考离散数学中的关系章节。
目录
3.0关系的相容性
在正式开始之前,先介绍一个概念,关系的相容性:
给定两个关系R、S,若满足:元数相同(具有相同数量的属性)、R中第i个属性和S中第i个属性必须来自同一个域,则说R和S是相容的。
根据定义不难理解,这里就不做赘述了。
-
3.1集合运算
- 为了便于理解,集合运算的介绍时,我们举例用的是如下的两个简单的关系(r和s)。
3.1.1并运算
- R和S所有元组合并,且删去重复组
- 相当于数学集合中的交集运算
- 用于记录的插入和添加
3.1.2差运算
-
R-S:R中删除与S中相同的元组
-
实现关系数据库记录的删除
3.1.3交运算
- R∩S=R-(R-S)
- 相当于数学中的并集运算
3.1.4笛卡尔积
-
用于两关系的连接操作
- 属性命名规则
- 两关系属性名相同:利用命名机制来区分,把各自关系附加到该属性上,两关系不存在相同属性名:省略前缀
- 更名运算:假设关系代数表达式是n元的,则表达式b表示返回表达式E的结果,并赋给他名字x,同时将各个属性更名为A1,A2,...,An。
3.2专门的关系运算
介绍专门关系运算时,各个运算的定义我这里就不写出了,比较晦涩,感兴趣的朋友可以自行搜索,这里想用图的形式帮助大家理解。
3.2.1选择运算σ
从关系中选取逻辑表达F为真的元组,是从行的角度进行的运算
从表里把满足你要求的行挑出来,然后合并!
举个例子:找出关系R中属性A=属性B并且属性D>5的元组。
3.2.2投影运算Π
关系R上的投影,是从关系R中取若干列组成新的关系 ,是从列的角度进行的运算
从表里把你要的列挑出来然后合并,but,投影的结果中要去掉相同的行。
其实很好理解,我们在02节将关系模型时候提到关系的性质中有一天“不能出现相同的元组,在本节开头我们就提到了关系代数运算的对象和结果仍是关系,那么,自然而然,投影的结果要去掉相同的行。
举个例子:投影关系R中的A、C属性。
那么,进一步想,为什么投影会出现相同元组,而选择就不会呢?
理解这个问题,更容易帮助大家理解选择和投影的定义和区别。
对于属性来说,选择是对行进行的运算,选择运算选择时包括所有属性的,而投影运算对列的运算,只涉及部分属性。根据关系的性质,操作前的关系肯定不存在相同的元组,选择是从这些本就不重复的元组里挑部分元组,而投影挑出是所有元组的部分列。比如说有三个元组”1,1,2“”1,1,3“”1,1,4“,如果对1、2两列进行投影,那么这三个元组都是”1,1“了。
3.2.3连接运算X
- 建立在笛卡尔积运算基础上
-
两个关系的笛卡尔积中选取属性间满足一定条件的元组
-
连接运算从R和S的笛卡尔积R×S中选取(R关系)在A 属性组上的值与(S关系)在B属性组上值满足比较关系θ 的元组。
-
两个关系笛卡尔积的结果上再进行选择运算
3.2.3.1等值连接
从关系R和关系S的笛卡尔积中选取A、B属性值相等的元组
3.2.3.2自然连接
特殊的等值连接,在等值连接的基础上,把重复的列属性去掉。
一般的连接操作是从行的角度进行运算,自然连接还需 要取消重复列,所以是同时从行和列的角度进行运算。
看个例子:
3.2.3.3外连接
- 外连接运算是连接运算的扩展,可以处理缺失信息
- 在结果中创建带空值的元组,以此来保留在连接中丢失的 那些元组,缺失属性上取null
- 根据保留元组的不同,外连接又分为左外连接,右外连接, 全外连接
- 外连接建立在自然连接的基础上
通过一个例子,就容易理解了
例1:
例2
3.2.4扩展的关系代数运算
其实,除了基本关系代数运算、附加的关系代数运算(交、连接运算)外,还有扩展的关系代数运算(可由基本关系代数运算表达,不能增强关系代数的表达能力,却可以简化一些常用的查询)。主要有广义投影和聚集运算。
广义投影是在投影的基础上,允许在投影列表中使用算术运算符和字符串函数。
聚集运算,是以值得一个集合作为输入,将单一得值作为结果返回。
扩展得关系代数运算就简单介绍这么多,感兴趣得朋友可以深入去了解和学习。
本文就介绍到这里,下一节我们将进入数据库查询语言SQL的学习。
下面这张图较为清晰的为大家梳理了本文的内容,创作不易,点个赞吧各位看官。