关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。运算对象、 运算符、运算结果是运算的三大要素。关系代数的运算按运算符的不同可分为传统的集合运算和专门的关系运算两类
一、关系运算分类
- 传统的集合运 算将关系看成元组的集合,其运算是从关系的“水平” 方向,即行的角度来进行;
- 而专门的关系运算不仅涉及行,而且涉及列。
- 前四种是传统的集合运算,后四种是专门的关系运算
符号 | 含义 |
---|---|
∩ | 交 |
- | 差 |
∪ | 并 |
x | 笛卡尔积 |
σ | 选择 |
Π | 投影 |
⋈ | 连接 |
÷ | 除 |
二、传统的集合运算
传统的集合运算是二目运算,包括并、差、交、笛卡儿积 种运算。
设关系\(R\)和关系\(S\)具有相同的目\(n\)(即两个关系都有\(n\)个属性),且相应的属性取自同一个域,\(t\) 是元组变量,\(t\in R\) 表示\(t\) 是R的一个元组。可以定义并、差、交、笛卡儿积运算如下。
1.并(union)
并关系 \(R\) 与关系 \(S\) 的并记作 \[ R\cup S=\{r|t\in R\vee t\in S\} \] 其结果仍为\(n\) 目关系,由属于 \(R\) 或属于 \(S\) 的元组组成。
2.差(except)
差关系\(R\)与关系 S 的差记作: \[ R-S=\{n\in R\wedge t\notin S\} \] 其结果关系仍为 \(n\) 目关系,由属于$ R$ 而不属于 $S $ 的所有元组组成。
3.交(intersection)
交关系 R 与关系 S 的交记作 \[ R\cap S=\{n|t\in R\wedge t\in S\} \] 其结果关系仍为 \(n\) 目关系,由既属于 \(R\) 又属于 \(S\) 的元组组成。关系的交可以用差来表示, 即 \(R\cap S=R-(R-S)\)。
4.笛卡儿积(cartesian product)
这里的笛卡儿积严格地讲应该是广义的笛卡儿积, 因为这里笛卡儿积的元素是元组。 两个分别为\(n\)目和\(m\)目的关系\(R\)和\(S\)的笛卡儿积是一个\((n+m)\)列的元组的集合。元组的前 \(n\) 列是关系$ R$ 的一个元组,后 \(m\) 列是关系 \(S\) 的一个元组。若 \(R\)有 \(k_{1}\) 个元组,\(S\) 有\(k_{2}\)个元组,则关系 \(R\) 和关系$ S$ 的笛卡儿积有 \(k_1\times k_2\)个元组。记作 \[ R\times S=\{ \widehat{i_{r}t_{s}}|t_{r}\in R\wedge t_{s}\in S\} \]
三、专门的关系运算
下面的运算的举例都基于以下三个关系:
1.选择 (selection)
选择又叫限制。选择运算实际上是从关系 中选取使逻辑表达式 为真的元组。这是从行的角度进行 的运算。
举例
查询信息系 (IS 系)全体学生。
在关系\(Student\)中查询\(Sdept\)为\(IS\)的哪几行。(这里的IS是字符型,要加上引号)
\(σ_{Sdept='IS'}(Student)\) 查询年龄小于 20 岁的学生。
\(σ_{Sage<20}(Student)\) |
---|
查询课程学分小于等于3的课程
\(σ_{Ccredit≤3}(Student)\)
2.投影
投影是从关系中选择出若干属性列组成新的关系,投影操作是从列的角度进行的运算。
举例
查询学生的姓名和所在系,即求 \(Student\) 关系上学生姓名和所在系两个属性上的投影。
\(Π_{Sname,Sdept}(Student)\) 查询学生关系 \(Student\) 中都有哪些系,即查询关系 \(Student\) 上所在系属性上的投影。投影会自动去重
\(Π_{Sdept}(Student)\)
3.连接(join)
连接也称为$θ $连接。它是从两个关系的笛卡儿积中选取属性间满足一定条件的元组
举例
等值连接
将关系\(R\)与关系\(S\)中属性\(B\)相同的连接成一个新的关系 \[ \mathrm{R}\operatorname*{\Join}_{\mathrm{A}=\mathrm{B}}\mathrm{S} \]
自然连接
自然连接是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组, 并且在结果中把重复的属性列去掉
\(\mathrm{R}\operatorname*{\Join}\mathrm{S}\) 非等值连接
\[ \mathrm{R}\operatorname*{\Join}_{\mathrm{C}<\mathrm{E}}\mathrm{S} \]
外连接
- 悬浮元组:被舍弃的元组称为悬浮元组。
- 在自然连接上加上被\(R\)和\(S\)中被舍弃的悬浮元组,就叫外连接,只加左边就叫左外连接,只加右边就加右外连接
外连接 左外连接 右外连接
4.除运算(division)
设关系 \(R\) 除以关系 \(S\) 的结果为关系 \(T\), 则 \(T\) 包含所有在 \(R\)但不在 \(S\) 中的属性及其值, 且\(T\)的元组与\(S\)的元组的所有组合都在\(R\)中。
举例
- \(a_1\)的象集为\(\{(b_1,c_2),(b_2,c_3),(b_2,c_1)\}\)
- \(a_2\)的象集为\(\{(b_3,c_7),(b_2,c_3)\}\)
- \(a_3\)的象集为\(\{(b_4 ,c_6)\}\)
- \(a_4\)的象集为\(\{(b_6 ,c_6)\}\)
只有\(a_1\)的所有象集在\(S\)中都包含,于是\(R÷S\)如下: