数据库关系代数
关系代数符号整体把握
下面来分点看看常见的关系代数及运用
1. 并运算,交运算,差运算
这个应该很简单,直接上图吧,假设有两张基础表
下面是两张表的三种基础运算结果
这个应该挺简单的,和普通的集合运算没什么区别
2. 笛卡尔积
这个运算也是比较常见的,对于参加的运算的元素,笛卡尔积与上面的三种基础运算不同的一点是,它不要求两个运算的元素的列数相同,换句话说就是上面三种基础的集合运算都要求表的列数相同。
下面是关于对笛卡尔积运算的简单定义(如果嫌定义烦的,直接看图)
( 数据中一个元组就是一行,属性就是一列)
**两个分别为m目和n目的关系R和关系S的广义笛卡儿积是一个有(m+n)个列的元组的集合。元组的前m个列是关系R的一个元组,后n个列是关系S的一个元组。若R有K1个元组,S有K2个元组,则关系R和关系S的广义笛卡儿积有K1×K2个元组,实际操作时,可从R的第一个元组开始,依次与S的每一个元组组合,然后,对R的下一个元组进行同样的操作,直至R的最后一个元组也进行同样的操作为止,即可得到R×S的全部元组。**
** 在mysql中我们写如下的SQL语句就是进行笛卡尔积**
select * from A, B ; --假设上面左边的两张表就是A,B
3. 选择运算(σ)
选择运算是从指定的关系中选出满足给定条件(用逻辑表达式表达)的元组而组成一个新的关系。
上面的黑色阴影部分就是选择出来的部分,简单来说就是过滤掉了一些行,这不就相当于SQL语句中的where吗,实际上就是这样的。
4. 投影(∏)
投影运算是从关系R中选取若干属性,并用这些属性组成一个新的关系。
这不就是选出相应的属性吗,和SQL语句中的select作用相等
下面来个例子说明一下上面的两种运算
显示三张基础表,S(学生表),C(课程表),SC(成绩表)
-- 如果我们想选出计算机系的学生,可以写出如下关系代数
σ Sdep='计算机系'(S)
等同SQL语句
select * from S where Sdep = '计算机系';
会出现如下的图片的结果
如果我们想看看学生表中对应的名字和系名
∏ Sname,Sdep (S)
-- 等同于SQL语句
select Sname, Sdep from S;
5. 连接
连接运算主要有以下几种形式。
① θ连接。
② 等值连接(θ连接的特例)。
③ 自然连接。
④ 外部连接(简称外连接)。
- 先来看看θ连接
A和B分别是关系R和S上语义相同的属性或属性组,θ是比较运算符。连接运算从R和S的广义笛卡儿积R×S中选择(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较运算符θ的元组。
- 等值连接是θ连接的一个特例,就是把θ运算符改为=
它是从关系R与关系S的广义笛卡儿积中选取A、B属性组值相等的那些元组 - 自然连接是等值连接一个特例,它会将两张表重复的那一列只取出一列而等值连接则会有两列相等的
自然连接与等值连接的差别如下。
① 自然连接要求相等的分量必须有共同的属性名,等值连接则不要求;
② 自然连接要求把重复的属性名去掉,等值连接却不这样做。
下面来个例子说明一下
以商品号对两张表分别进行等值连接和自然连接
---------------------------------等值连接----------------------------------------
---------------------------------自然连接----------------------------------------
- 最后看一下外连接
外连接有三种形式:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)
1) 左外连接的含义是把连接符号左边的关系(这里是关系R)中不满足连接条件的元组也保留到连接后的结果中,并在连接结果中将该元组对应的右边关系(这里是关系S)的各个属性均置成空值(NULL)。
2) 右外连接的含义是把连接符号右边的关系(这里是关系S)中不满足连接条件的元组也保留到连接后的结果中,并在连接结果中将该元组对应的左边关系(这里是R)的各个属性均置成空值(NULL)。
3)全外连接的含义是把连接符号两边的关系(R和S)中不满足连接条件的元组均保留到连接后的结果中,并在连接结果中将不满足连接条件的各元组的相关属性均置成空值(NULL)。
看张上面商品和销售左外连接的图片
文中的图片都来自数据库系统教程(第2版)-何玉洁