- 关系数据库设计
- DBMS - 数据库规范化
- DBMS - 数据库连接
- 存储和文件结构
- DBMS - 存储系统
- DBMS - 文件结构
- 事务和并发
- DBMS - 事务
- DBMS - 并发控制
- DBMS - 死锁
- 备份和恢复
- DBMS - 数据备份
- DBMS - 数据恢复
- DBMS 有用资源
- DBMS - 快速指南
- DBMS - 有用资源
- DBMS - 讨论
DBMS - 关系代数
关系数据库系统应该配备一种查询语言,以帮助用户查询数据库实例。有两种查询语言——关系代数和关系演算。
关系代数
关系代数是一种过程化查询语言,它将关系的实例作为输入,并产生关系的实例作为输出。它使用运算符执行查询。运算符可以是**一元**的或**二元**的。它们接受关系作为输入,并产生关系作为输出。关系代数在关系上递归执行,中间结果也被认为是关系。
关系代数的基本运算如下:
- 选择
- 投影
- 并集
- 集合差
- 笛卡尔积
- 重命名
我们将在接下来的章节中讨论所有这些操作。
选择运算 (σ)
它从关系中选择满足给定谓词的元组。
**符号** − σp(r)
其中σ代表选择谓词,r代表关系。p 是命题逻辑公式,可以使用and、or和not等连接词。这些术语可以使用关系运算符,例如 − =、≠、≥、<、>、≤。
**例如** −
σ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
其中r和s是数据库关系或关系结果集(临时关系)。
要使并集运算有效,必须满足以下条件:
- r和s必须具有相同数量的属性。
- 属性域必须兼容。
- 重复的元组会自动消除。
∏ author (Books) ∪ ∏ author (Articles)
**输出** − 投影写过书或文章或两者都写过的作者的姓名。
集合差 (-)
集合差运算的结果是存在于一个关系中,但不存在于第二个关系中的元组。
**符号** − r − s
查找存在于r中但不属于s的所有元组。
∏ author (Books) − ∏ author (Articles)
**输出** − 提供写过书但没写过文章的作者的姓名。
笛卡尔积 (Χ)
将两个不同关系的信息组合成一个关系。
**符号** − r Χ s
其中r和s是关系,它们的输出将定义为:
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 还涉及关系运算符。
元组关系演算和域关系演算的表达能力等同于关系代数。