设关系 R 和关系 S 具有相同的目(即两个关系都有 n 个属性),且相应的属性取自同一个域,t 是元组变量,t \in R 表示 t 是 R 的一个元组。可以定义并、差、交、笛卡儿积运算如下:
并(union): 关系 R 与关系 S 的并记作: R \cup S = \{t |t \in R \land t \in S \} 其结果仍为 n 目关系,由属于 R 或属于 S 的元组组成。
差(except): 关系 R 与关系 S 的差记作:R - S = \{ t | t \in R \land t \notin S \} 其结果关系仍为 n 目关系,由属于 R 而不属于 S 的所有元组组成。
交(intersection): 关系 R 与关系 S 的交记作 R \cap S = \{ t | t \in R \land t \in S \} 其结果关系仍为 n 目关系,由既属于 R 又属于 S 的元组组成。 关系的交可以用差来表示,即 R \cap S = R - ( R - S )。
笛卡儿积(cartesian product): 这里笛卡儿积的元素是元组。 两个分别为 n 目和 m 目的关系 R 和 S 的笛卡儿积是一个 (n + m) 列的元组的集合。元组的前 n 列是关系 R 的一个元组,后 m 列是关系 S 的一个元组。 若 R 有个元组,S 有 2 个元组,则关系 R 和关系 S 的笛卡儿积有 k_1 \times k_2 个元组。记作 R \times S = \{\overset{\frown}{t_r t_s} | t_r \in R \land t_s \in S \}
2.4.2 专门的关系运算
专门的关系运算包括选择、投影、连接、除运算等。为了叙述上的方便,先引入几个记号:
R,t \in R,t[A_i] 设关系模式为 R(A_1, A_2, \dots , A_n) 它的一个关系设为 Rt \in R 表示 t 是 R 的一个元组 t[A_i] 表示元组 t 中相应于属性 A_i 的一个分量
\overset{\frown}{t_r t_s}R 为 n 目关系,S 为 m 目关系 t_r \in R,t_s \in S, \overset{\frown}{t_r t_s} 称为元组的连接 \overset{\frown}{t_r t_s} 是一个 n + m 列的元组,前 n 个分量为 R 中的一个 n 元组,后 m 个分量为 S 中的一个 m 元组
象集 Z_x 给定一个关系 R(X, Z), X 和 Z 为属性组 当 t[X] = x 时,x 在 R 中的象集(Images Set) 为:Z_x = \set{ t[Z] | t\in R, t[X] = x } 它表示 R 中属性组 X 上值为 x 的诸元组在 Z 上分量的集合。
连接运算的含义: 从两个关系的笛卡尔积中选取属性间满足一定条件的元组 R \underset{A \theta B}{\bowtie} S = \{ \overset{\frown}{t_r t_s} | t_r \in R \land t_s \in S \land t_r[A] \theta t_s[B] \} A 和 B :分别为 R 和 S 上度数相等且可比的属性组
连接运算从 R 和 S 的广义笛卡尔积 R \times S 中选取 R 关系在 A 属性组上的值与 S 关系在 B 属性组上的值满足比较关系 \theta 的元组
两类常用连接运算:
等值连接(equijoin): \theta 为 = 的运算 从关系 R 与 S 的广义笛卡尔积中选取 A,B 属性值相等的那些元组 R \underset{A = B}{\bowtie} S = \{ \overset{\frown}{t_r t_s} | t_r \in R \land t_s \in S \land t_r[A] \theta t_s[B] \}
自然连接(natural join): 自然连接是一种特殊的等值连接: 两个关系中进行比较的分量必须是相同的属性组 在结果中把重复的属性列去掉 自然连接的含义: R 和 S 具有相同的属性组 B R \bowtie S = \{ \overset{\frown}{t_r t_s} [U-B] | t_r \in R \land t_s \in S \land t_r[B] = t_s[B] \}
一般的连接操作是从行的角度进行运算。
自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
除运算
给定关系 R(X, Y) 和 S(Y, Z),其中 X, Y, Z 为属性组。
R 中的 Y 与 S 中的 Y 可以有不同的属性名,但必须出自相同的域集。
R 与 S 的除运算得到一个新的关系 P(X)
P 是 R 中满足下列条件的元组在 X 属性列上的投影: 元组在 X 上分量值 x 的象集 Y_x 包含 S 在 Y 上投影的集合 R \div S = \{ t_r[X] | t_r \in R \land \Pi_Y(S) \subseteq Y_x \} Y_x :x 在 R 中的象集,x = t_r[X]