一、首先我们来了解一下什么是关系代数
关系代数是以关系为运算对象的一组高级运算集合,显然这样的解释 较难理解;简单的说,关系代数是一种用于关系数据查询的一种抽象查询语句,主要是通过对关系的运算来表达查询。
二、关系代数的分类
传统的集合操作:
- 并、差、交、笛卡尔积
专门的关系运算:
- 投影(对关系进行垂直分割——对列的操作)
- 选择(对关系进行水平分割——对行的操作)
- 连接(关系之间的结合)
- 除法(笛卡尔积的逆运算)
下面的表格更加直观的介绍关系代数的分类,并对其进行了简单的分类

三、常用的关系代数的使用以及含义
为了便于理解我将结合实例进行解释;其中R 、S分别为两个独立的关系,关系R和S具体属性如下:
- 关系R
| A | B | C |
|---|---|---|
| a | b | c |
| d | a | f |
| c | b | d |
- 关系S
| A | B | C |
|---|---|---|
| b | g | a |
| d | a | f |
- 并:R和S的并是由属于R或S的元组构成的集合(元组是指二维表中的行)
例: R U S
| A | B | C |
|---|---|---|
| a | b | c |
| d | a | f |
| c | b | d |
| b | g | a |
R U S ={t | t ∈ R ∨ t ∈ S}
在这里有一个问题,那就是为什么要删除重复的元组,而不是简单的将两个关系直接加在一起,而这是因为关系是一种规范化了的二维表,所以在关系模型中,需要对关系作出一些限制:
- 关系中的每一个属性值都不可分(属性——二维表的列)
- 关系中不可出现重复列
- 由于关系是一个集合,因此不考虑元组间的顺序,即没有行序
- 列的顺序无所谓,即列的顺序可以任意交换
- 差:R和S的差属于R不属于S的元组组成(对行进行操作同时是在R的基础上剪出S里的元组)
例: R - S
| A | B | C |
|---|---|---|
| a | b | c |
| c | b | d |
- 交:R和S的交,是由属于R又属于S的元组构成
例: R ∩ S
| A | B | C |
|---|---|---|
| d | a | f |
- 笛卡尔积:R和S的笛卡尔积,简单来说为R的每一个元组与S的每一个元组相互组合形成一个新的关系,而这个新的关系则为R和S的笛卡尔积的结果
由于R和S的属性相同(行名相同)这里用RA表示R中的A…
例: R X S
| R.A | R.B | R.C | S.A | S.B | S.C |
|---|---|---|---|---|---|
| a | b | c | b | g | a |
| a | b | c | d | a | f |
| d | a | f | b | g | a |
| d | a | f | d | a | f |
| c | b | d | b | g | a |
| c | b | d | d | a | f |
希望路过的大神多多指点错误之处!
1万+

被折叠的 条评论
为什么被折叠?



