DBMS - 关系代数



关系数据库系统应该配备一种查询语言,以帮助用户查询数据库实例。有两种查询语言——关系代数和关系演算。

关系代数

关系代数是一种过程化查询语言,它将关系的实例作为输入,并产生关系的实例作为输出。它使用运算符执行查询。运算符可以是**一元**的或**二元**的。它们接受关系作为输入,并产生关系作为输出。关系代数在关系上递归执行,中间结果也被认为是关系。

关系代数的基本运算如下:

  • 选择
  • 投影
  • 并集
  • 集合差
  • 笛卡尔积
  • 重命名

我们将在接下来的章节中讨论所有这些操作。

选择运算 (σ)

它从关系中选择满足给定谓词的元组。

**符号** − σp(r)

其中σ代表选择谓词,r代表关系。p 是命题逻辑公式,可以使用and、ornot等连接词。这些术语可以使用关系运算符,例如 − =、≠、≥、<、>、≤。

**例如** −

σsubject = "database"(Books)

**输出** − 选择学科为“数据库”的图书元组。

σsubject = "database" and price = "450"(Books)

**输出** − 选择学科为“数据库”且“价格”为 450 的图书元组。

σsubject = "database" and price = "450" or year > "2010"(Books)

**输出** − 选择学科为“数据库”且“价格”为 450 或出版日期在 2010 年以后的图书元组。

投影运算 (∏)

它投影满足给定谓词的列。

符号 − ∏A1, A2, An (r)

其中 A1, A2 , An 是关系r的属性名。

由于关系是一个集合,所以会自动消除重复的行。

**例如** −

subject, author (Books)

从 Books 关系中选择并投影名为 subject 和 author 的列。

并集运算 (∪)

它对两个给定的关系执行二元并集,定义如下:

r ∪ s = { t | t ∈ r or t ∈ s}

**符号** − r U s

其中rs是数据库关系或关系结果集(临时关系)。

要使并集运算有效,必须满足以下条件:

  • rs必须具有相同数量的属性。
  • 属性域必须兼容。
  • 重复的元组会自动消除。
author (Books) ∪ ∏ author (Articles)

**输出** − 投影写过书或文章或两者都写过的作者的姓名。

集合差 (-)

集合差运算的结果是存在于一个关系中,但不存在于第二个关系中的元组。

**符号** − rs

查找存在于r中但不属于s的所有元组。

author (Books) − ∏ author (Articles)

**输出** − 提供写过书但没写过文章的作者的姓名。

笛卡尔积 (Χ)

将两个不同关系的信息组合成一个关系。

**符号** − r Χ s

其中rs是关系,它们的输出将定义为:

r Χ s = { qt | q ∈ r 且 t ∈ s}

σauthor = 'tutorialspoint'(Books Χ Articles)

**输出** − 生成一个关系,显示 tutorialspoint 编写的全部书籍和文章。

重命名运算 (ρ)

关系代数的结果也是关系,但没有名称。重命名操作允许我们重命名输出关系。“重命名”操作用小写希腊字母rho ρ表示。

**符号** − ρ x (E)

其中表达式E的结果以x命名保存。

附加运算:

  • 集合交集
  • 赋值
  • 自然连接

关系演算

与关系代数相反,关系演算是一种非过程化查询语言,也就是说,它说明做什么,但从不解释怎么做。

关系演算存在两种形式:

元组关系演算 (TRC)

过滤变量范围超过元组

**符号** − {T | 条件}

返回满足条件的所有元组 T。

**例如** −

{ T.name |  Author(T) AND T.article = 'database' }

**输出** − 返回来自 Author 关系中写过关于“数据库”文章的作者的“name”元组。

TRC 可以被量化。我们可以使用存在量词 (∃) 和全称量词 (∀)。

**例如** −

{ R| ∃T   ∈ Authors(T.article='database' AND R.name=T.name)}

**输出** − 以上查询将产生与前一个查询相同的结果。

域关系演算 (DRC)

在 DRC 中,过滤变量使用属性的域,而不是整个元组值(如上面提到的 TRC 中所做的那样)。

**符号** −

{ a1, a2, a3, ..., an | P (a1, a2, a3, ... ,an)}

其中 a1, a2 是属性,P 代表由内部属性构建的公式。

**例如** −

{< article, page, subject > |  ∈ TutorialsPoint ∧ subject = 'database'}

**输出** − 从 TutorialsPoint 关系中生成 Article、Page 和 Subject,其中 subject 为数据库。

与 TRC 一样,DRC 也可以使用存在量词和全称量词编写。DRC 还涉及关系运算符。

元组关系演算和域关系演算的表达能力等同于关系代数。

广告