数据库杂谈(三)—— 关系代数

简介: 关系代数是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。在本文中,我们不仅谈论关系代数的知识点,而且还配备了对应的练习题。

3 形式化关系查询语言

3.1 关系代数

3.1.1 概述

说明:关系代数语言是一种过程化查询语言,它包括一个运算的集合,这些运算以一个或两个关系为输入,产生一个新的关系作为结果。

关系代数一般包含五个基本操作,如果一个系统或者数据库产品包含这五个基本操作,那我们认为这个系统的功能是完备的

任何的操作都可以通过这五个操作来组合完成,如下所示:

操作名 英文 符号
选择操作 select operation $σ$
投影操作 project operation π
笛卡尔乘积 Cross product ×
集合差操作 Set - diffrent
集合并操作 union

选择投影和更名为一元运算,因为它们只对一个关系进行操作;而另外三个对两个关系进行运算,故为二元运算。

事实上,目前流行的关系数据库中,除了满足关系完备性以外,还增加了不少关系代数所不支持的操作,如排序分组聚集函数,甚至是传递闭包的计算。

提示:需要注意的是,在一些书上关系代数也叫做关系代数操作,简称关系操作。在《数据库原书(第6版)》中,出现了更名这一基本操作,但是在大多数的考试中,基本操作还是以上表为准。

在学习的过程中,对于考试我们不仅需要掌握关系代数符号,还需要掌握会写关系代数表达式。


3.1.2 选择操作

说明:选择操作就是加限制条件选元组,作用相当于SQL中的where子句。

image-20221018165658250

提示:需要注意的是,基本操作都是支持多种运算的组合的,比如选择和投影和连接和集合运算一起使用,这都是可以的,但是要注意先后顺序,这在后面我们会给出演示。


3.1.3 投影操作

说明:投影就是选取关系中的某些列,即选取某些属性,作用相当于SQL中的select子句。

image-20221018165915022

提示

  • 投影后的表由于有可能不包含候选键,这就会导致有些元组可能是重复的,这时候系统会自动消除重复元组,所得关系(表)的元组数小于原关系的元组数。如果投影后的表包含候选键,那么元组数和投影前一样。
  • 在实际的数据库产品中,数据库投影后他是不会自动去重的,因为数据库他不能保证用户对重复的数据是否有应用价值,所以,除非你要求,不然他不会自动去重。


3.1.4 集合操作

3.1.4.1 笛卡尔乘积

说明:集合操作指的是笛卡尔乘积

在表的连接查询方面有一种现象被称为:笛卡尔积现象(笛卡尔乘积现象),也就是说,你可以理解为两张表做笛卡尔乘积,等于两张表中所有元组两两匹配的所有结果,如图所示:

image-20221018165900709

关系一有6条元组,关系二也是6条,那么做笛卡尔乘积,所得的关系就是36条元组。

当然,我们说的连接,实际上就是加了条件的笛卡尔乘积。


3.1.4.2 并交差操作

说明:这个概念和我们数学中集合的概念是一样的,但是对于数据库来说,它会出现一些问题。

image-20221018165849657

如果是以上的两张表做并操作,那么这是完全没有办法的,老师表中的属性和学生表的属性完全不一样,你总不能直接把数据贴上去吧?对此,我们引入了并兼容这个概念。

并兼容要求参与并交差的两个关系的元组必须限制为同类型,也就是相同目,对应的属性的域也需相同。


3.1.5 连接操作

说明:连接其实和笛卡尔乘积很像,连接实际上就是一个加了条件的笛卡尔乘积,他只找出那些满足条件的元组。其符号为$\bowtie$。

一般来说,我们的连接符号代表的都是自然连接,即笛卡尔乘积加上默认条件外键相等。下面举个例子:

image-20221018165528609

如果是对这两张表做连接,其结果实际上为:

Sno Cno Grade Sno Sname Ssex
S01 C01 92 S01 王二
S02 C02 90 S02 张三
S02 C03 82 S02 张三
S03 C01 80 S03 李四

其默认Sno为外键,通过外键进行连接了。


3.1.6 更名操作

说明:如果你在一条关系代数表达式中引用了两张同样的表,例如学生表连接学生表,为了没有歧义,你可以使用更名,更名用希腊字母rho($\rho$)来表示,对于你指定的关系代数表示式E,表示式$\rho_x(E)$返回表示式E的结果,并把名字x赋给了它。

实际上,还可以把更名的表示式写出$\rho_{(A_1,A_2...,A_n)}(E)$,其中$A_n$表示E得出来的结果对表中各属性进行重命名。

比如$\rho_{学生表1}(学生表)$就是一个更名。

提示:在考试中根本不需要更名操作,因为考试出的题很少出现歧义问题。


3.1.7 除操作

说明:除法操作不好用定义来解释,如图所示:在<a1,b1>里和<a2,b2>里,明显对应的R.3和R.4都包含了S表,所以{<a1,b1>,<a2,b2>}就是除法的结果。其他不含S表的<a3,b3>可以看做结果的余数。

image-20221018165428057

提示:除法操作并不是基本操作,这就说明其可以由基本操作来表示。这在考试中如果故意刁难是会涉及到的。


3.1.8 外连接

引入:想要知道什么是外连接,就要知道什么是内连接。

  • 内连接:假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来,就是内连接,AB两张表没有主副之分,两张表是平等的。
  • 外连接:假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表,主要查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。

外连接分类

  • 左外连接(左连接):表示左边的这张表是主表。
  • 右外连接(右连接):表示右边的这张表是主表。

提示:左连接有右连接的写法,右连接也会有对应的左连接的写法。为什么这么说,当你左连接想写成右连接的时候,你把表对调一下就可以了。

说明:连接的本质是加上了条件的笛卡尔积,也就是说表1和表2做连接,那么是表1的元组去匹配满足条件的表2的元组,不满足条件则不录入结果表;但是对于左外连接,表1的所有元组都会在结果表中,即使它没有匹配到符合条件的表2元组,它也会存在,且匹配不了的表2元组在结果表位置用NULL填充。


3.1.9 外并操作

说明:我们前面说过,两个表若不满足并兼容是不可以进行集合并交差操作的,但是可以进行外并操作,即强行整合两表,结果的属性是两表属性的总和,如果其他表没有另外一个表的属性,那么那一列会被填上NULL。


3.1.10 赋值操作

说明:我们如果不想写出一条关系代数表达式来表示某个结果,而想拆分成两个步骤,那么我们可以使用赋值操作,其符号为$←$。例如:

temp1 = R×S

temp2 ← $σ_{sno = S01}(S)$

result ← temp1×temp2

提示:实际上,这个更名操作在考试中根本用不到,因为你通常都是通过嵌套的方式一口气写完一整条的关系代数表达式,而不会写出来两条。


3.1.11 练习

题目描述:设有一个零件供应关系数据库,它包括S、P、J、SPJ四个关系,请按要求写出关系代数表达式。

image-20221018165409444

image-20221018165359408

image-20221018165346818

目录
相关文章
|
移动开发 vr&ar
数据库系统概论——关系代数详解
关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是利用对关系的运算来表达查询的。任何运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。关系代数的运算对象是关系,运算结果亦为关系。集合运算符将关系看成元组的集合从关系的“水平”方向即行的角度来进行运算专门的关系运算符不仅涉及行而且涉及列算术比较符辅助专门的关系运算符进行操作逻辑运算符辅助专门的关系运算符进行操作。
668 1
数据库系统概论——关系代数详解
|
5月前
|
数据库 Python
数据库系统概论期末经典大题讲解(用关系代数进行查询)
数据库系统概论期末经典大题讲解(用关系代数进行查询)
148 0
|
11月前
|
数据库 vr&ar
关系数据库——关系代数
关系数据库——关系代数
153 0
|
数据库
第2章 关系数据库——2.4关系代数
第2章 关系数据库——2.4关系代数
|
数据库
数据库系统概论 ---- 第二章 -- 关系数据库(2.4 关系代数)(下)
数据库系统概论 ---- 第二章 -- 关系数据库(2.4 关系代数)(下)
|
人工智能 数据库
数据库系统概论 ---- 第二章 -- 关系数据库(2.4 关系代数)(上)
数据库系统概论 ---- 第二章 -- 关系数据库(2.4 关系代数)
|
JavaScript 数据库
数据库原理与应用系列_03关系数据库与关系代数
数据库原理与应用系列_03关系数据库与关系代数
数据库原理与应用系列_03关系数据库与关系代数
|
数据库
数据库中关系代数中的关系运算
除法运算的定义: 这个概念的描述的非常抽象,刚开始学习的同学完全不知所云。这里通过一个实例来说明除法运算的求解过程: 设有关系R、S 如图所示,求R÷S 的结果: 求解步骤过程: 第一步:找出关系R和关系S中相同的属性,即Y属性。
1071 0
|
9天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
43 6