**2.4 关系代数笔记总结:**
---
**1. 关系代数概述**:
- 关系代数是一种用于描述关系数据库查询的**抽象的查询语言**。
- 它主要用**运算符**对关系进行操作以表达查询。
- 一个运算由三大要素组成:**运算对象、运算符、运算结果**。
- 在关系代数中,运算对象和运算结果都是关系。
**2. 运算符分类**:
- **集合运算符**:包括并、差、交、笛卡儿积。
- **专门的关系运算符**:选择、投影、连接、除。
**3. 传统的集合运算**:
- **并 (Union) \( U \)**
- 符号:\( R \cup S \)
- 描述:取两个关系的所有元组。结果关系包含属于R或S的元组。
- **差 (Except) \( - \)**
- 符号:\( R - S \)
- 描述:结果关系由属于R但不属于S的元组组成。
- **交 (Intersection) \( \cap \)**
- 符号:\( R \cap S \)
- 描述:结果关系由既属于R又属于S的元组组成。
- **笛卡儿积 (Cartesian Product) \( \times \)**
- 符号:\( R \times S \)
- 描述:构建一个新的关系,每一个元组是关系R的一个元组与关系S的一个元组的组合。如果R有\( k_1 \)个元组,S有\( k_2 \)个元组,那么结果关系有\( k_1 \times k_2 \)个元组。
**4. 图例解释**:
- 图2.2展示了关系R和S的各种集合运算的实例。
- 如图2.2(a)和图2.2(b)是关系R和S,图2.2(c)、图2.2(d)、图2.2(e)、图2.2(f)分别展示了它们的并、交、差、笛卡儿积的结果。
---
**Tips**:
1. **关系代数的核心**是用于查询和操作数据的一组运算符。
2. 为了应用关系代数的集合运算符,关系R和S必须具有相同的属性数,并且对应的属性应该来自同一个域。
3. 笛卡儿积是最基础的关系运算,其他复杂的关系运算,如连接,通常都是基于笛卡儿积进行的。
### 2.4.2 专门的关系运算
专门的关系运算主要包括选择、投影、连接和除运算。为了更好地理解这些运算和应用它们,首先定义一些基础的记号:
1. **基础记号**:
- 设关系模式为 \( R(A_1, A_2, ..., A_n) \) ,一个关系为 \( R \)。\( t \in R \) 表示 \( t \) 是 \( R \) 的一个元组,而 \( t[A_i] \) 表示元组 \( t \) 中对应属性 \( A_i \) 的一个分量。
- 若 \( A = \{A_n, A_2, ..., A_\alpha\} \) 是 \( A_1, A_2, ..., A_n \) 的子集,则 \( A \) 被称为属性列或属性组。
- \( R \) 为n目关系, \( S \) 为m目关系。 \( t_1 \) 是 \( R \) 的元组, \( t_2 \) 是 \( S \) 的元组,二者的连接被称为元组的串接,产生一个由 \( n+m \) 列组成的元组。
- 给定关系 \( R(X, Z) \),定义象集为: \( Z = \{ t[Z] | t \in R, t[X] = x \} \)。
2. **选择运算 (Selection)**:
- 记作 \( \sigma_F(R) \),其中 \( F \) 是选择条件,是一个逻辑表达式。
- 逻辑表达式 \( F \) 的基本形式为 \( X_i \theta Y_i \),其中 \( \theta \) 可以是比较运算符,例如 >, ≥, <, ≤, = 或 ≠。
- 选择运算实际上是从关系 \( R \) 中选择使逻辑表达式 \( F \) 为真的元组。
**例子**:查询信息系 (IS系) 的所有学生:
- \( \sigma_{Sdept='IS'}(Student) \)
3. **投影运算 (Projection)**:
- [在提供的文本中并没有提到,但通常会介绍。]
4. **连接运算 (Join)**:
- [在提供的文本中并没有提到,但通常会介绍。]
5. **除运算 (Division)**:
- [在提供的文本中并没有提到,但通常会介绍。]
表格、图例和示例是为了帮助读者更好地理解每个运算如何应用于实际的关系和数据集。
第2章 关系数据库笔记整理:
---
### 1. 基本查询
- **查询示例**:查询年龄小于20岁的学生
```SQL
SELECT * FROM Student WHERE age < 20;
```
### 2. 投影 (Projection)
- 定义:从关系R中选择某些属性列,组成新的关系。
- 记法:\( \pi_{n_4}(R) = \{ r[A] | t \in R \} \)
- 其中A为R中的属性列。
- 投影操作考虑列的角度。
- **投影示例**:
1. 查询学生的姓名和所在系:
```SQL
SELECT Sname, Sdept FROM Student;
```
2. 查询学生关系中都有哪些系:
```SQL
SELECT DISTINCT Sdept FROM Student;
```
- 注意:投影可能删除某些列和元组。原因是删除某些属性列后,可能出现重复行。
### 3. 连接 (Join)
- 定义:从两个关系的笛卡儿积中选取满足某条件的元组。
- 主要类型:
- **等值连接 (Equijoin)**:选择A、B属性值相等的元组。
- **自然连接 (Natural Join)**:要求两个关系中比较的分量必须是同名的属性组,结果中删除重复的属性列。
- 自然连接从行和列的角度进行运算。
- **连接示例**:
1. 非等值连接:\( R \times S \)
2. 等值连接:\( R \bowtie_{R.B = S.B} S \)
3. 自然连接:\( R \bowtie S \)
- 悬浮元组:在自然连接时,可能有些元组在其他关系中没有匹配,这些元组称为悬浮元组。
- **外连接 (Outer Join)**:如果包括悬浮元组,填充NULL。
- 左外连接:仅包括左边关系中的悬浮元组。
- 右外连接:仅包括右边关系中的悬浮元组。
### 4. 除运算 (Division)
- 定义:关系R除以关系S,结果是关系T,包含在R但不在S中的属性及其值,且T的元组与S的所有组合都在R中。
- 除操作同时考虑行和列。
- **除运算示例**:
- \( R / S = \{ t[X] | t \in R \text{ and } Ay(S) \subseteq Y \} \)
- 查询至少选修1号和3号课程的学生号码:
```SQL
SELECT Sno FROM SC WHERE Cno IN (1,3) GROUP BY Sno HAVING COUNT(*) = 2;
```
---
**关系代数的总结:**
**重点:**
1. **基本操作**:选择、投影、并集、差集、笛卡尔积等。
2. **扩展操作**:连接(特别是等值连接和自然连接)、除法、外连接。
3. **符号和表示**:例如,`σ` 用于选择,`π` 用于投影。
4. **闭包性质**:关系代数运算的结果仍然是关系。
5. **悬浮元组的概念**:某些元组在操作后可能被丢弃。
6. **外连接和其变种**:左外连接、右外连接。
**难点:**
1. **连接操作**:连接涉及到两个关系,并且需要对属性间进行特定的比较。
2. **除运算**:是一个复杂的操作,需要对两个关系进行比较,并确定其中一个关系的某些元组是否满足特定条件。
3. **理解悬浮元组**:在某些操作中,如连接,某些元组可能不满足连接条件而被丢弃。
4. **组合多种关系代数运算**:如例题中给出的,如何综合应用多种操作来满足查询要求。
**易错点:**
1. **混淆选择与投影**:选择是基于某些条件筛选元组,而投影是选择某些列。
2. **处理重复**:在投影操作后,可能产生重复的行,需要删除这些重复。
3. **笛卡尔积的误用**:未加条件地计算两个关系的笛卡尔积可能导致大量无意义的结果。
4. **连接条件的遗漏**:进行连接操作时,忘记指定连接条件或使用错误的连接条件。
5. **自然连接的误区**:可能忘记在结果中删除重复的列。
6. **外连接的细节**:外连接可能包含NULL值,需要仔细处理。
对于学习关系代数,理解每个操作的含义和它如何作用于关系是关键。实际应用中,正确地组合这些操作以执行复杂查询是一项挑战,需要通过大量练习来掌握。