关系代数

使用关系模型时,我们可以使用2组操作。关系代数是其中之一。

当使用关系模型,我们可以使用2组操作。

第一个叫做关系代数,这是一个程序语言

这是SQL的基础,因此学习非常重要-因为SQL是使用关系数据库的实际标准。

第二个叫做关系演算而不是程序性的陈述性语言。这是我们与数据库交互方式的根本差异,因为您不会告诉数据库软件该怎么办,你只要说出来你想要什么,然后整理出具体操作方法。

这是编程语言之间的常见区别。在现代的前端中,我们说在React中与DOM的交互是声明性的。使用原始JavaScript修改DOM是过程性的。

像这样的语言数据记录合格教育局奎尔以关系演算为基础。我不打算讨论这个问题,因为与SQL所采用的更实用的方法相比,它是一种更利基的处理方式,但是您可以根据需要进行查看。

有了这个介绍,让我们继续关系代数

我们有2种类型的操作:

  • 主要操作
  • 加盟行动

关系代数中的主要运算

主要操作是:

  • 联盟只要两个表具有相同的列和属性类型(域),就可以从两个表中获取数据,并生成元组的和。
  • 区别只要两个表具有相同的列和属性类型(域),就可以获取包含在第一个表中但不包含在第二个表中的数据,从而产生元组的差异。
  • 笛卡尔积根据属性值将两个表中的数据获取并生成一个将它们的数据组合在一起的单个表。
  • 选择仅基于某些条件提取表中包含的某些元组(行)。
  • 项目生成仅包含现有表的一个或多个属性(列)的新表
  • 改名用于重命名属性,用于防止多个表在不同数据上具有相同名称时发生冲突

关系代数中的联接运算

连接可能是关系代数可以执行的最强大的运算。它们建立在主要操作之上,并且使您可以关联包含在不同关系(表)中的数据。

注意:我将很快讨论DBMS在实践中的联接,这主要是理论上的。

我们有2个主要的加入版本:自然连接θ联接. All the other versions are extracted from those 2.

自然加入

自然加入将两个关系(表)相关联,并基于属性的相同值创建一个新表。

首先,我们需要两个具有相同属性名称(列)的关系。然后,如果关系A中的属性值与关系B中的属性不匹配,则该行不属于结果的一部分,将忽略该行。

例子:

关系A

员工ID 姓名
1 标记
2 托尼
3 里克

关系B

经理姓名 员工ID
托德 1
阿尔伯特 2

我们可以执行自然联接来获取每位员工的老板姓名:

员工ID 姓名 经理姓名
1 标记 托德
2 托尼 阿尔伯特

由于这些关系具有共同的Employee ID属性名称,因此在结果中仅出现一次,而不是2次。

由于在关系B中没有相应的条目,因此关系A中存在的#3员工Rick不包括在此表中。

Theta-join

Theta-join允许根据任何条件执行连接以比较两个不同关系中的两个列,而不仅仅是自然连接那样的相等性。

它执行两个表的笛卡尔积,并根据我们要进行的选择过滤结果。

等值联接

等值联接是theta联接,其中选择基于两个不同表中的属性值之间的相等性。

与自然联接的区别在于,我们可以选择要比较的属性名称(列)。

稍后在引入SQL时,我们将更多地讨论联接,因此我们可以在实践中使用它们。


更多数据库教程: