DBMS 关系代数,本文中,我们将讨论关系代数。在前面的教程中,我们简要讨论了关系代数和微积分的基础知识,其中我们了解了使用这些理论数学系统的必要性。
什么是 DBMS 中的关系代数?
关系代数是一种过程查询语言,适用于关系模型。查询语言的目的是从数据库中检索数据或对数据执行各种操作,如插入,更新,删除。当我说关系代数是一种过程查询语言时,它意味着它告诉我们要检索哪些数据以及如何检索它们。
另一方面,关系演算是一种非过程式查询语言,这意味着它会告诉要检索哪些数据但不会告诉如何检索它。我们将在单独的教程中讨论关系演算。
关系代数中的运算类型
我们将这些操作分为两类:
- 基本操作
- 派生操作
基本/基本操作:
- 选择(
σ
) - 投影(
Π
) - 并集(
∪
) - 差集(
-
) - 笛卡尔积(
X
) - 重命名(
ρ
)
衍生操作:
- 自然连接(
⋈
) - 左,右,全外连接(
⟕
,⟖
,⟗
) - 交集(
∩
) - 除法(
÷
)
让我们在示例的帮助下逐一讨论这些操作。
选择运算符(σ
)
选择运算符由 sigma(σ
)表示,它用于查找满足给定条件的关系(或表)中的元组(或行)。
如果您了解一点 SQL,那么您可以将其视为 SQL 中的where
子句,它用于相同的目的。
选择运算符语法(σ
)
选择运算符(σ
)示例
查询:
输出:
投影运算符(Π
)
投影运算符由Π
符号表示,用于从表(或关系)中选择所需的列(或属性)。
关系代数中的投影运算符类似于 SQL 中的Select
语句。
投影运算符语法(Π
)
投影运算符(Π
)示例
在这个例子中,我们有一个包含三列的表CUSTOMER
,我们只想获取表的两列,我们可以在投影运算符Π
的帮助下完成。
查询:
输出:
并集运算符(∪
)
并集运算符用∪
符号表示,用于从两个表(关系)中选择所有行(元组)。
让我们再讨论一下并集运算符。假设我们有两个关系R1
和R2
都有相同的列,我们想从这些关系中选择所有元组(行),然后我们可以在这些关系上应用并集运算符。
注意:两个表中存在的行(元组)只在并集中出现一次。简而言之,您可以说并集操作后没有重复项。
并集运算符的语法(∪
)
并集运算符(∪
)示例
表 1:Course
表 2:Student
查询:
输出:
注意:正如你所看到的那样,输出中没有重复的名称,即使我们在两个表中都有很少的共同名称,同样在COURSE
表中我们也有重复的名称。
交集运算符(∩
)
交集运算符用∩
符号表示,用于从两个表(关系)中选择公共行(元组)。
假设我们有两个关系R1
和R2
都有相同的列,我们想要选择两个关系中存在的所有元组(行),那么在这种情况下我们可以对这两个关系R1∩R2
应用交集运算。
注意:只有那两个表中存在的那些行才会出现在结果集中。
交集运算符语法(∩
)
交集运算符(∩
)示例
让我们采取与上面相同的例子。
表 1:Course
表 2:STUDENT
查询:
输出:
差集运算符(-
)
差集运算符用-
符号表示。假设我们有两个关系R1
和R2
,我们想要选择所有那些存在于关系R1
中但不存在于关系R2
中的元组(行),这可以使用集合差R1-R2
来完成。
差集运算符语法(-
)
差集运算符(-
)示例
让我们看看上面我们看到的课程和学生。
查询:
让我们编写一个查询来选择STUDENT
表中但不存在于COURSE
表中的学生姓名。
输出:
笛卡尔积(X
)
笛卡尔积用X
符号表示。假设我们有两个关系R1
和R2
,然后这两个关系的笛卡尔积(R1 X R2
)将第一关系R1
的每个元组与第二关系R2
的每个元组组合。我知道这听起来令人困惑,但是一旦我们举一个这样的例子,你就能理解这一点。
笛卡尔积(X
)的语法
笛卡尔积(X
)示例
表 1:R
表 2:S
查询:
让我们查找表R
和S
的笛卡尔积。
输出:
注意:输出中的行数始终是每个表中行数的乘积。在我们的示例中,表 1 有 3 行,表 2 有 3 行,因此输出有3×3 = 9
行。
重命名(ρ
)
重命名(ρ
)操作可用于重命名关系的属性。
重命名(ρ
)语法:
重命名(ρ
)示例
假设我们有一个表Customer
,我们正在获取客户名称,我们将所得关系重命名为CUST_NAMES
。
表:客户
查询:
输出: