数据库原理(八)- 关系代数
数据库原理(八)- 关系代数
- 前言
- 传统的集合运算
- 并(union)
- 差(except)
- 交(intersection)
- 笛卡尔积(cartesian product)
- 专门的集合运算
- 选择(selection)
- 投影(projection)
- 连接(join)
- 一般连接
- 等值连接 (equijoin)
- 自然连接(natural join)
- 外连接 (outer join)
- 左外连接 (left outer join)
- 右外连接 (right outer join)
- 除运算(division)
- 借鉴
前言
关系代数是一种抽象得抽象语言,它用作对关系德运算来表达查询。
任何一种运算都是讲一定的运算符作用与一定得运算对象上,得到预期的运算结果。所以运算对象、运算符、运算结果是运算的三大要素,而关系运算符分为传统运算符和专门运算符,如下图:
传统的集合运算
传统的集合运算属于二目运算,包括并、差、交、笛卡尔积4种运算。
我们首先假设有R和S两种关系,且相应的属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组
R表:
A | B | C |
---|---|---|
a1 | b1 | c1 |
a1 | b2 | c2 |
a2 | b2 | c1 |
S表:
A | B | C |
---|---|---|
a1 | b2 | c2 |
a1 | b3 | c2 |
a2 | b2 | c1 |
并(union)
并的关系表达式为:
R∪S={t|t∈R∨t∈S}
我们将两张表代入关系表达式,得出以下结果:
R∪S
A | B | C |
---|---|---|
a1 | b1 | c1 |
a1 | b2 | c2 |
a2 | b2 | c1 |
a1 | b3 | c2 |
可知,并操作是将两张表的数据整合,消除重复列
差(except)
差的关系表达式为:
R-S={t|t∈R∧t∉ S}
将两张表代入关系表达式,得出以下结果
R-S
A | B | C |
---|---|---|
a1 | b1 | c1 |
假如倒转一下,得出一下结果
S-R
A | B | C |
---|---|---|
a1 | b3 | c2 |
可知,差操作是将被减表的数据去除,只保留减表的特有数据
交(intersection)
交的关系表达式为:
关系表达式 R∩S={t|t∈R∧t∈S}
将两张表代入关系表达式,得出下结果
R∩S
A | B | C |
---|---|---|
a1 | b2 | c2 |
a2 | b2 | c1 |
可知,交操作是将两张表的交集数据输出
笛卡尔积(cartesian product)
笛卡尔积的关系表达式为
R×S={tr ts|tr∈R∧ts∈S}
将两张表代入关系表达式,得出以下结果
R×S
A | B | C | A | B | C |
---|---|---|---|---|---|
a1 | b1 | c1 | a1 | b2 | c2 |
a1 | b1 | c1 | a1 | b3 | c2 |
a1 | b1 | c1 | a2 | b2 | c1 |
a1 | b2 | c2 | a1 | b2 | c2 |
a1 | b2 | c2 | a1 | b3 | c2 |
a1 | b2 | c2 | a2 | b2 | c1 |
a2 | b2 | c1 | a1 | b2 | c2 |
a2 | b2 | c1 | a1 | b3 | c2 |
a2 | b2 | c1 | a2 | b2 | c1 |
可知,笛卡尔积的操作就是将乘表的所有元组与被乘表的元组都匹配一遍
专门的集合运算
专门的集合运算包括选择、投影、连接和除运算等,我们先给出几张表,等下在进行集合运算中更加清晰
学生表(student)
学号 | 姓名 | 性别 | 年龄 | 所在系 |
---|---|---|---|---|
20170901 | 赵一 | 男 | 20 | cs |
20170902 | 钱二 | 女 | 20 | cs |
20170903 | 张三 | 男 | 19 | ma |
课程表(course)
课程号 | 课程名 | 先行课 | 学分 |
---|---|---|---|
1 | 数据库 | 1 | 4 |
2 | 数学 | 1 | 2 |
3 | 信息系统 | 2 | 4 |
成绩表(sc)
学号 | 课程号 | 成绩 |
---|---|---|
20170901 | 1 | 82 |
20170902 | 1 | 92 |
20170902 | 2 | 85 |
20170903 | 3 | 90 |
选择(selection)
选择又称为限制,它在关系R中选择满足给定条件的诸元组,记作
σF(R)={t|t∈R∧F(t)='真'}
其中F表示选择条件,它是一个逻辑表达式,取逻辑值”真“或”假“。
逻辑表达式F的基本形式为:
X₁θY₁ 其中θ表示为条件运算符,可以是 >、 ≧、<、 ≦、 = 和 <>(不等于)
举个例
查询年龄等于20岁的学生
σ 年龄列 = 20(学生表) // = 就是应用在关系式中的条件运算符
查询结果
学号 | 姓名 | 性别 | 年龄 | 所在系 |
---|---|---|---|---|
20170901 | 赵一 | 男 | 20 | cs |
20170902 | 钱二 | 女 | 20 | cs |
在基本的选择条件之上还可以进一步的进行逻辑运算(∧与、∨或、¬非),比如
查询一个年龄等于20的男生
σ 年龄列 = 20(学生表) a ∧性别列 = 男(学生表)
查询结果
学号 | 姓名 | 性别 | 年龄 | 所在系 |
---|---|---|---|---|
20170901 | 赵一 | 男 | 20 | cs |
投影(projection)
关系R上的投影是从R中选择若干属性列组成新的关系。记作
∏a(R)={t[A]}|t∈R}
其中A为R的属性列,投影操作是从列的角度进行的运算
举个例子
查询学生表中所有学生的学号和姓名
∏ 学号,姓名(学生表)
查询结果
学号 | 姓名 |
---|---|
20170901 | 赵一 |
20170902 | 钱二 |
20170903 | 张三 |
连接(join)
连接也称为θ连接,它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
这里假设两个关系,关系中有某些属性列相同,且值取自同一域
R
A | B | C |
---|---|---|
a1 | b1 | 5 |
a1 | b2 | 6 |
a2 | b3 | 8 |
a2 | b4 | 12 |
S
B | E |
---|---|
b1 | 3 |
b2 | 7 |
b3 | 10 |
b3 | 2 |
b5 | 2 |
一般连接
在一般连接上,A和B分别为R和S上列数相等且可比的属性组,θ为比较运算符,记作
举个例子
输出 R⋈S 且C<E的元组
结果为
A | R.B | C | S.B | E |
---|---|---|---|---|
a1 | b1 | 5 | b2 | 7 |
a1 | b1 | 5 | b3 | 10 |
a1 | b2 | 6 | b2 | 7 |
a1 | b2 | 6 | b3 | 10 |
a2 | b3 | 8 | b3 | 10 |
等值连接 (equijoin)
θ为“=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A、B属性组值相等的那些元组,记作
举个例子
R⋈S,且R.B=S.B
结果为
A | R.B | C | S.B | E |
---|---|---|---|---|
a1 | b1 | 5 | b1 | 3 |
a1 | b2 | 6 | b2 | 7 |
a2 | b3 | 8 | b3 | 10 |
a2 | b3 | 8 | b3 | 2 |
等值连接会去除属性列不相等的元组
自然连接(natural join)
自然连接是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组,并在结果中把重复的属性列去掉,记作
举个例子
自然连接 R⋈S
结果为
A | B | C | E |
---|---|---|---|
a1 | b1 | 5 | 3 |
a1 | b2 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
外连接 (outer join)
两个关系自然连接时,选择两个关系的公共属性上的值相等的元组构成新的关系,而那些公共属性上的值不相等的元组就会被舍弃,这些被舍弃的元组称为悬浮元组。
如果把悬浮元组也保存在结果关系中,而在其他属性填空值(null),那么这种连接就叫做外连接
如R外连接S,结果为
A | B | C | E |
---|---|---|---|
a1 | b1 | 5 | 3 |
a1 | b2 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
a2 | b4 | 12 | null |
nul | b5 | null | 2 |
左外连接 (left outer join)
如果只保留左边关系R中的悬浮元组就叫做左外连接,如R⋊S,结果为
A | B | C | E |
---|---|---|---|
a1 | b1 | 5 | 3 |
a1 | b2 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
a2 | b4 | 12 | null |
右外连接 (right outer join)
如果只保留右边关系S中的悬浮元组就叫做右外连接,如R⋉S,结果为
A | B | C | E |
---|---|---|---|
a1 | b1 | 5 | 3 |
a1 | b2 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
nul | b5 | null | 2 |
除运算(division)
我们用象集来定义除法,首先给定关系R(X,Y)和S(Y,Z),其中X、Y、Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。
R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上x分量值x的象集Yx包含S在Y上投影的集合,记作
R÷S={tr [X]|tr∈R∧∏y(S)⊆Yx}
举个列子,这里先列出两张表
R
A | B | C |
---|---|---|
a1 | b1 | c2 |
a1 | b2 | c1 |
a2 | b3 | c1 |
a2 | b4 | c6 |
S
B | C | D |
---|---|---|
a1 | b1 | d1 |
a1 | b2 | d2 |
R÷S 解法
在关系R中,A可以取2个值{a1,a2}.其中:
a1的象集为{(b1,c2),(b2,c1)}
a2的象集为{(b3,c1),(b4,c6)}
S在(B,C)上的投影为{(a1,b1),(a1,b2)}
显然只有a1的象集(B,C)a₁包含了S在(B,C)属性组上的投影,所以R÷S={a₁}
结果为:
A |
---|
a₁ |
除操作是同时从行和列的角度进行运算
借鉴
王珊,萨师煊.数据库系统概论(第五版)[M].北京:高等教育出版社,2014:48-56.
图片出自于书上
数据库原理(八)- 关系代数相关推荐
- 【数据库原理】关系代数
文章目录 简述. 关系代数. 传统的集合运算. 并 Union. 差 Difference. 交 Intersection. 广义笛卡尔积 Extended Cartesian Product. 专门 ...
- 数据库原理—关系模型的数据操作(八)
数据库原理-关系模型的数据操作(八)
- 数据库原理及应用(MySQL版)MySQL实验指导参考答案(实验一到实验八)
点赞,收藏,慢慢看. <一>实验一 CREATE DATABASE STUDENTSDB; USE STUDENTSDB; CREATE TABLE STUDENT_INFO(学号 CHA ...
- 数据库原理归档——对于数据库原理最全的总结
恭喜你来到新天地! 以下的笔记是我复习了三次总结出来的,属于一个归档.目前还在对以往的知识做一个更加详细地总结,所以仍在更新中.这份笔记对于新手入门数据库来说十分友好,语言通俗易懂.在数据库中,还涉及 ...
- MS SQL Server数据库原理
MS SQL Server数据库原理 一. 数据库基本概念 数据库系统(DBS):采用数据库技术的计算机系统,由数据库(数据).数据库管理系统(软件).数据库管理员(人员).硬件平台(硬件)和软件平台 ...
- 南京工程学院 数据库复习(数据库系统概论复习 及 数据库原理与应用样题)
一.数据库系统概论 1.1 百度文库 复习文档(需下载券) <数据库系统概论>(王珊.第五版) ★第一章 绪论 v 本章内容:数据库系统概述.数据模型.数据库系统结构 v 本章主要考点 ...
- 数据库原理与应用(SQL Server)笔记 第九章 存储过程和触发器
目录 前言 一.存储过程 (一)存储过程的定义 (二)存储过程的特点 (三)存储过程的分类 1.用户存储过程 2.系统存储过程 3.扩展存储过程 (四)存储过程的创建 (五)存储过程的执行 (六)带参 ...
- 【数据库原理及应用】经典题库附答案(14章全)——第二章:关系数据库知识
[数据库原理及应用]经典题库附答案(14章全)--第一章:数据库基础知识 [数据库原理及应用]经典题库附答案(14章全)--第二章:关系数据库知识 [数据库原理及应用]经典题库附答案(14章全)--第 ...
- 【渝粤题库】陕西师范大学200781 数据库原理及应用 作业
<数据库原理及应用>作业 一.选择题 1.在数据管理技术的发展过程中,经历了人工管理阶段.文件系统阶段和数据库系统阶段.在这几个阶段中,数据独立性最高的是____阶段. 数据库系统 B.文 ...
最新文章
- 第五章 业务架构,5.3 千亿访问量下的开放平台技术揭秘(作者:风胜)
- 缺陷大扫除(Bug Bash)
- python【数据结构与算法】判断对称二叉树
- 在sql server里,日期字段按天数进行group by查询的方法
- 腾讯民汉翻译征战全国机器翻译大赛夺得双冠
- 论数据集成技术的演变和发展 3/3
- Android开发之PCM音频流采集| 音频流录制与PCM音频流播放的实现方法
- 功能测试代码python_如何使您的Python代码更具功能性
- 爬虫.之登陆及动态网页的抓取
- windows 自动备份mysql方案
- PyTorch 1.0 中文文档:torch.utils.data
- 白宫发布太空系统网络安全防护指令
- 服务器不知道循环生成文件,Windows服务器下PowerShell命令往服务器共享文件夹进行文件拷贝、循环文件重命名...
- 属性用途_onenote样式系列②:详解11种默认样式,附style属性值
- cs python_python_13(前端—cs)
- 用【快剪辑】给视频打马赛克
- 简单学习SIPp使用手册
- spring中的web上下文,spring上下文,springmvc上下文区别(超详细)
- 敢不敢用一年时间改变你自己?
- 北上资金全透视月报:上月外资大幅流入,增持周期与消费(20210107).PDF