关系代数

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


关系代数

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

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

  • Select
  • Project
  • Union
  • Set different
  • Cartesian product
  • Rename

我们将在以下部分讨论所有这些操作。


Select 运算 (σ)

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

符号 − σp(r)

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

例如

σsubject = "database"(Books)

输出 − Selects tuples from books where subject is 'database'.

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

输出 − Selects tuples from books where subject is 'database' and 'price' is 450.

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

输出 − Selects tuples from books where subject is 'database' and 'price' is 450 or those books published after 2010.


Project 运算 (∏)

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

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

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

重复的行被自动消除,因为关系是一个集合。

例如

subject, author (Books)

输出 − Selects and projects columns named as subject and author from the relation Books.


Union 运算 (∪)

它在两个给定关系之间执行二元联合,并定义为 −

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

符号 − r U s

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

为了使联合操作有效,必须满足以下条件 −

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

输出 − Projects the names of the authors who have either written a book or an article or both.


Set Difference 集差运算 (−)

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

符号rs

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

author (Books) − ∏ author (Articles)

输出 − Provides the name of authors who have written books but not articles.


Cartesian Product 笛卡尔积运算 (Χ)

将两种不同关系的信息合二为一。

符号 − r Χ s

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

r Χ s = { q t | q ∈ r and t ∈ s}

σauthor = 'tutorialspoint'(Books Χ Articles)

输出 − Yields a relation, which shows all the books and articles written by tutorialspoint.


Rename 运算 (ρ)

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

符号ρ x (E)

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

附加操作是 −

  • 设置交点
  • 任务
  • 自然连接

关系演算

与关系代数相比,关系演算是一种非过程查询语言,也就是说,它告诉我们要做什么,但从不解释如何去做。

关系演算以两种形式存在 −

元组关系演算 (TRC)

过滤元组上的变量范围

符号 − {T | Condition}

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

例如

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

输出 − Returns tuples with 'name' from Author who has written article on 'database'.

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

例如

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

输出 − The above query will yield the same result as the previous one.

域关系演算 (DRC)

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

符号

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

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

例如

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

输出 − Yields Article, Page, and Subject from the relation TutorialsPoint, where subject is database.

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

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