关系代数
关系数据库系统应该配备一种查询语言,可以帮助其用户查询数据库实例。 有两种查询语言 − 关系代数和关系演算。
关系代数
关系代数是一种过程查询语言,它将关系实例作为输入,并产生关系实例作为输出。 它使用运算符来执行查询。 运算符可以是 unary 或 binary。 他们接受关系作为他们的输入,并让关系作为他们的输出。 关系代数是在关系上递归执行的,中间结果也被认为是关系。
关系代数的基本运算如下 −
- 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
其中 r 和 s 是数据库关系或关系结果集(临时关系)。
为了使联合操作有效,必须满足以下条件 −
- r 和 s 必须具有相同数量的属性。
- 属性域必须兼容。
- 自动消除重复的元组。
∏ author (Books) ∪ ∏ author (Articles)
输出 − Projects the names of the authors who have either written a book or an article or both.
Set Difference 集差运算 (−)
集差运算的结果是元组,它们存在于一种关系中但不存在于第二种关系中。
符号 − r − s
查找存在于 r 但不存在于 s 中的所有元组。
∏ author (Books) − ∏ author (Articles)
输出 − Provides the name of authors who have written books but not articles.
Cartesian Product 笛卡尔积运算 (Χ)
将两种不同关系的信息合二为一。
符号 − r Χ s
其中 r 和 s 是关系,它们的输出将被定义为 −
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 还涉及关系运算符。
元组关系演算和域关系演算的表达能力相当于关系代数。