关系数据库之关系代数
文章目录
- 1 传统的关系运算
- 1.1 并 union
- 1.2 交 intersection
- 1.3 差 except
- 1.4 笛卡尔积 cartesian product
- 1.5 传统关系运算举例
- 2 专用的关系运算
- 2.1 选择 selection
- 2.2 投影 projection
- 2.3 连接 join
- 2.4 除 division
- 2.5 专用关系运算举例
关系数据库的关系代数运算符有8种,分为两大类,如下表所示:
分类 | 运算符 | 含义 |
---|---|---|
传统关系运算符 | ∪∪∪ | 并 |
−−− | 差 | |
∩∩∩ | 交 | |
××× | 笛卡尔积 | |
专用关系运算符 | σ | 选择 |
∏ | 投影 | |
⋈ | 连接 | |
÷ | 除 |
1 传统的关系运算
传统的集合运算是二元运算,包括并、差、交、笛卡尔积4种运算。设有两关系R、S。
1.1 并 union
关系R与关系S的并记作:R∪S={t∣t∈R∨t∈S}R\cup S=\{t\ |\ t\in R \lor t\in S\}R∪S={t ∣ t∈R∨t∈S}即合并R和S所有元组
1.2 交 intersection
关系R与关系S的交记作:R∩S={t∣t∈R∧t∈S}R\cap S=\{t\ |\ t\in R \land t\in S\}R∩S={t ∣ t∈R∧t∈S}关系的交也可用差来表示:R∩S=R−(R−S)R\cap S=R-(R-S)R∩S=R−(R−S)即取出R与S中共有的元组
1.3 差 except
关系R与关系S的差记作:R−S={t∣t∈R∧t∉S}R- S=\{t\ |\ t\in R \land t\notin S\}R−S={t ∣ t∈R∧t∈/S}即去掉R中属于S的元素
1.4 笛卡尔积 cartesian product
关系R与关系S的并记作:R×S={tRtS⌢∣tR∈R∧tS∈S}R\times S=\{\overset{\large\frown}{t_Rt_S}\ |\ t_R\in R \land t_S\in S\}R×S={tRtS⌢ ∣ tR∈R∧tS∈S}这里的笛卡尔积指的是广义笛卡尔积,对元组进行笛卡尔积有点类似于小学数学课上学过的握手游戏。
对于R×SR\times SR×S来说,表示每个R中的元组都要与S中的元组连接一次
1.5 传统关系运算举例
设RRR:
color | pattern | size |
---|---|---|
红 | A | 5 |
红 | B | 10 |
蓝 | B | 5 |
SSS:
color | pattern | size |
---|---|---|
红 | B | 10 |
红 | C | 10 |
蓝 | B | 5 |
则有:
- RRR与SSS的并R∪SR\cup SR∪S:
color | pattern | size |
---|---|---|
红 | A | 5 |
红 | B | 10 |
蓝 | B | 5 |
红 | C | 10 |
- RRR与SSS的交R∩SR\cap SR∩S:
color | pattern | size |
---|---|---|
红 | B | 10 |
蓝 | B | 5 |
- RRR与SSS的差R−SR- SR−S:
color | pattern | size |
---|---|---|
红 | A | 5 |
- RRR与SSS的笛卡尔积R×SR\times SR×S:
R.color | R.pattern | R.size | S.color | S.pattern | S.size |
---|---|---|---|---|---|
红 | A | 5 | 红 | B | 10 |
红 | A | 5 | 红 | C | 10 |
红 | A | 5 | 蓝 | B | 5 |
红 | B | 10 | 红 | B | 10 |
红 | B | 10 | 红 | C | 10 |
红 | B | 10 | 蓝 | B | 5 |
蓝 | B | 5 | 红 | B | 10 |
蓝 | B | 5 | 红 | C | 10 |
蓝 | B | 5 | 蓝 | B | 5 |
2 专用的关系运算
专用的关系运算符包括选择、投影、连接、除运算
在具体介绍运算符之前为了方便表达,先引入几个符号:
- RRR:关系。R={r1,r2,...,rn}R=\{r_1,r_2,...,r_n\}R={r1,r2,...,rn},其中rir_iri表示RRR中的列。类似的,SSS等符号也代表一个关系
- ttt:元组。ttt代表RRR的某一行,称ttt为元组。
- t[ri]t[r_i]t[ri]:分量。t[ri]t[r_i]t[ri]表示ttt行中rir_iri列的值,称t[ri]t[r_i]t[ri]为分量。
- Zt[ri]Z_{t[r_i]}Zt[ri]:象集。Zt[ri]Z_{t[r_i]}Zt[ri]表示ttt行中除rir_iri列外其他列的值,称Zt[ri]Z_{t[r_i]}Zt[ri]为象集。
- θ\thetaθ:比较运算符。比较运算符有6种,分别是===、>>>、≥\geq≥、<<<、≤\leq≤、<><><>
2.1 选择 selection
选择关系运算记作:σriθt[ri](R)={t∣t∈R∧riθt[ri]=true}\sigma_{r_i\theta t[r_i]}(R)=\{\ t\ |\ t\in R\land r_i\theta t[r_i]=true\}σriθt[ri](R)={ t ∣ t∈R∧riθt[ri]=true}即取出RRR表中rir_iri列的值与t[ri]t[r_i]t[ri]具有θ\thetaθ关系的行
例如:
σSage<20(Student)\sigma_{Sage<20}(Student)σSage<20(Student)表示取出StudentStudentStudent表中SageSageSage列值小于数值20的行
σSname=′李勇′(Student)\sigma_{Sname='李勇'}(Student)σSname=′李勇′(Student)表示取出StudentStudentStudent表中SnameSnameSname列值等于字符串李勇的行
2.2 投影 projection
投影关系运算记作:∏ri(R)={t[ri]∣t∈R}\prod\ _{r_i}(R)=\{t[r_i]\ |\ t\in R\}∏ ri(R)={t[ri] ∣ t∈R}即取出RRR表中的rir_iri列
例如:
∏Sage(Student)\prod\ _{Sage}(Student)∏ Sage(Student)表示从表StudentStudentStudent取出SageSageSage列形成新的关系
∏Sage,Sname(Student)\prod\ _{Sage,Sname}(Student)∏ Sage,Sname(Student)表示从表StudentStudentStudent取出SageSageSage和SnameSnameSname列形成新的关系
2.3 连接 join
连接关系运算记作:riθrjR⋈S={tRtS∣tR∈R∧tS∈R∧tR[ri]θtS[rj]⌢}\overset{R\Join S}{_{r_{i}\theta r_{j}}}=\{\overset{\large\frown}{t_Rt_S\ |t_R\in R \land t_S\in R\land t_R[r_i]\theta t_S[r_j]\ }\}riθrjR⋈S={tRtS ∣tR∈R∧tS∈R∧tR[ri]θtS[rj] ⌢}即选取RRR与SSS的笛卡尔积中tR[ri]t_R[r_i]tR[ri]与tS[rj]t_S[r_j]tS[rj]满足关系θ\thetaθ的行
连接有四种特殊形式:
- 非等值连接。就是指θ\thetaθ不为等号的连接,例如ri<rjR⋈S\overset{R\Join S}{_{r_{i}< r_{j}}}ri<rjR⋈S表示连接满足R.ri<S.rjR.r_i<S.r_jR.ri<S.rj关系的RRR与SSS中的元组
- 等值连接。就是指θ\thetaθ为等号的连接,例如ri=rjR⋈S\overset{R\Join S}{_{r_{i}=r_{j}}}ri=rjR⋈S表示连接满足R.ri=S.rjR.r_i=S.r_jR.ri=S.rj关系的RRR与SSS中的元组
- 自然连接。自然连接是一种特殊的等值连接,就是rir_iri与rjr_jrj的属性名一致且值相等的等值连接,并在连接结果中去掉重复列,而在一般的等值连接中只需要满足rir_iri与rjr_jrj的值相等即可,记作R⋈SR\Join SR⋈S。
- 外连接。外连接是一种特殊的自然连接,在自然连接的过程中,若连接后元组里的某个属性出现Null值就会舍去该元组,而外连接则会保留该元组。外连接分为三种:
- 1、外连接。保留两边关系自然连接后出现Null值属性的元组,记作R:⋈:SR:\Join: SR:⋈:S
- 2、左外连接。保留左边关系自然连接后出现Null值属性的元组,记作R:⋈SR:\Join SR:⋈S
- 3、右外连接。保留右边关系自然连接后出现Null值属性的元组,记作R⋈:SR\Join: SR⋈:S
2.4 除 division
除关系运算记作:R÷S={tR[ri]∣tR∈R∧∏rj(S)⊆rjtR[ri]}R\div S=\{\ t_R[r_i]\ |\ t_R\in R\land\prod\ _{r_j}(S)\subseteq r_{j\ t_R[r_i]}\ \}R÷S={ tR[ri] ∣ tR∈R∧∏ rj(S)⊆rj tR[ri] }即取出RRR中使R.rjR.r_jR.rj完全等于S.rjS.r_jS.rj的R.riR.r_iR.ri元组
例如:
∏Sname,Sage(R)÷∏SageS\prod\ _{Sname,Sage}(R)\div \prod\ _{Sage}S∏ Sname,Sage(R)÷∏ SageS表示取RRR投影中使R.SageR.SageR.Sage完全等于S.ageS.ageS.age的R.nameR.nameR.name元组,形成新的关系
2.5 专用关系运算举例
设RRR:
color | pattern | size |
---|---|---|
红 | A | 5 |
红 | B | 6 |
蓝 | C | 8 |
蓝 | D | 12 |
SSS:
pattern | weight |
---|---|
A | 3 |
B | 7 |
C | 10 |
C | 2 |
E | 2 |
- RRR的选择,σcolor=′红′(R)\sigma_{color='红'}(R)σcolor=′红′(R),取出RRR表中colorcolorcolor列值为字符串’红’的行形成新的关系:
color | pattern | size |
---|---|---|
红 | A | 5 |
红 | B | 6 |
- RRR的投影,∏color,size(R)\prod\ _{color,size}(R)∏ color,size(R),从表RRR取出color,sizecolor,sizecolor,size列形成新的关系:
color | size |
---|---|
红 | 5 |
红 | 6 |
蓝 | 8 |
蓝 | 12 |
- RRR与SSS的连接
非等值连接,size<weightR⋈S\overset{R\Join S}{_{size< weight}}size<weightR⋈S,连接满足size<weightsize< weightsize<weight关系的RRR与SSS中的元组
color | R.pattern | size | S.pattern | weight |
---|---|---|---|---|
红 | A | 5 | B | 7 |
红 | A | 5 | C | 10 |
红 | B | 6 | B | 7 |
红 | B | 6 | C | 10 |
蓝 | C | 8 | C | 10 |
等值连接,R.pattern=S.patternR⋈S\overset{R\Join S}{_{R.pattern= S.pattern}}R.pattern=S.patternR⋈S,连接满足R.pattern=S.patternR.pattern= S.patternR.pattern=S.pattern关系的RRR与SSS中的元组
color | R.pattern | size | S.pattern | weight |
---|---|---|---|---|
红 | A | 5 | A | 3 |
红 | B | 6 | B | 7 |
蓝 | C | 8 | C | 10 |
蓝 | C | 8 | C | 2 |
自然连接,R⋈SR\Join SR⋈S,连接RRR与SSS中同名属性值相等的元组:
color | pattern | size | weight |
---|---|---|---|
红 | A | 5 | 3 |
红 | B | 6 | 7 |
蓝 | C | 8 | 10 |
蓝 | C | 8 | 2 |
外连接,R:⋈:SR:\Join: SR:⋈:S,保留两边关系自然连接后出现Null值属性的元组:
color | pattern | size | weight |
---|---|---|---|
红 | A | 5 | 3 |
红 | B | 6 | 7 |
蓝 | C | 8 | 10 |
蓝 | C | 8 | 2 |
蓝 | D | 12 | null |
null | E | null | 2 |
左外连接,R:⋈SR:\Join SR:⋈S,保留左边关系自然连接后出现Null值属性的元组:
color | pattern | size | weight |
---|---|---|---|
红 | A | 5 | 3 |
红 | B | 6 | 7 |
蓝 | C | 8 | 10 |
蓝 | C | 8 | 2 |
蓝 | D | 12 | null |
右外连接,R⋈:SR\Join: SR⋈:S,保留右边关系自然连接后出现Null值属性的元组:
color | pattern | size | weight |
---|---|---|---|
红 | A | 5 | 3 |
红 | B | 6 | 7 |
蓝 | C | 8 | 10 |
蓝 | C | 8 | 2 |
null | E | null | 2 |
- RRR的除运算
设有除关系KKK
color | size |
---|---|
红 | 5 |
红 | 6 |
则R÷KR\div KR÷K表示取出RRR中使R.colorR.colorR.color完全等于S.colorS.colorS.color、R.sizeR.sizeR.size完全等于S.sizeS.sizeS.size的R.parttenR.parttenR.partten元组
partten |
---|
A |
关系数据库之关系代数相关推荐
- [渝粤教育] 厦门大学 大数据技术原理与应用 参考 资料
教育 -大数据技术原理与应用-章节资料考试资料-厦门大学[] 第1章 大数据概述 单元测验 1.[单选题]第三次信息化浪潮的标志是: A.个人电脑的普及 B.互联网的普及 C.云计算.大数据.物联网技 ...
- 大数据技术原理与应用课后题(林子雨)
大数据技术原理与应用(林子雨) 第1章 大数据概述 1单选(2分) 第三次信息化浪潮的标志是: A.个人电脑的普及 B.云计算.大数据.物联网技术的普及 C.虚拟现实技术的普及 D.互联网的普及 正确 ...
- 大数据技术原理与应用(林子雨)-NoSQL数据库单元测验
1单选(2分) 下列关于NoSQL数据库和关系型数据库的比较,不正确的是得分/总分 A. NoSQL数据库缺乏统一的查询语言,而关系型数据库有标准化查询语言 B. NoSQL数据库具有弱一致性,关系型 ...
- 【大数据处理技术】期末复习整理
所用教材:<大数据技术原理与应用--概念.存储.处理.分析与应用(第2版)>,由厦门大学计算机科学系林子雨编著. 教材官网:http://dblab.xmu.edu.cn/post/big ...
- 大数据与云计算学习(2)
四.分布式数据库HABSE 1.请阐述HBase和传统关系数据库的区别 正确答案: 我的答案: (1)数据类型:关系数据库采用关系模型,具有丰富的数据类型和存储方式,HBase则采用了更加简单的数据模 ...
- 大数据技术原理与应用——练习题
第一章 大数据概述 1第三次信息化浪潮的标志是: A.互联网的普及 B.云计算.大数据.物联网技术的普及 C.个人电脑的普及 D.虚拟现实技术的普及 2就数据的量级而言,1PB数据是多少TB? A.1 ...
- 21年研究生入学考试(哈尔滨工程大学)复试准备——《数据库系统》知识点总结
前言 到此为止,我完成了复试科目:数据库的两轮复习,第一轮<白皮书>没有到手,我根据手里的课本和中国大学MOOC战德臣教授的视频进行复习.我使用的是岳丽华.金培权.万寿红翻译的斯坦福大学的 ...
- 大数据存储技术期末复习
单选题 1.以下关于云计算.大数据和物联网之间的关系,论述错误的是: A.物联网可以借助于云计算实现海量数据的存储 B.物联网可以借助于大数据实现海量数据的分析 C.云计算.大数据和物联网三者紧密相关 ...
- 测控计算机三级有用吗,测控专业与计算机三级
测控专业与计算机三级 答案:2 信息版本:手机版 解决时间 2019-10-02 13:40 已解决 2019-10-01 21:00 我是学测控技术与仪器专业的,计算机二级报考的是VB,现在我想报 ...
- 大数据技术原理与应用(林子雨)MOOC作业与检验答案
第1章 大数据概述 1单选(2分) 第三次信息化浪潮的标志是: A.个人电脑的普及 B.云计算.大数据.物联网技术的普及 C.虚拟现实技术的普及 D.互联网的普及 正确答案:B你选对了 2单选(2分) ...
最新文章
- Objective-c 网络编程1 Web请求和响应
- mysql 索引合并
- Linux下的I/O复用与epoll详解
- 打包指令_Linux系统常用指令总结
- 树莓派Raspberry Pi OS开机自启动脚本
- cesium米转换经纬度_Cesium 坐标系转换
- python动态类型的坑_在Python中避免动态类型错误的策略是什么(NoneType没有属性x)?...
- /usr/bin/ld: cannot find -lmysqlclient解决方法
- AEC产业未来发展的三大趋势,数字化只是其中之一
- 本周大新闻|佳能AR头显MREAL X1发布,Quest手势追踪2.0来袭
- 深入解读5G关键技术
- 无线ap上网设置教程
- 女朋友生日java程序_★★女朋友要过生日了!我想用java为她写一个程序,一举两得啊! 希望大家多提建议啊!谢谢!!!...
- C++ SuperLU 混合编程
- 手把手教你用深度学习做物体检测(四):模型使用
- python爬取网站的某一句话_Python实现JS解密并爬取某音漫客网站
- 余额宝内幕:一个屌丝公司如何找到千亿级痛点
- Android之SeekBar(0在中间)
- python求平方根的三种方法
- pycharm如何刷新项目文件
热门文章
- [经验教程]iPhone苹果手机电池健康度怎么查询及如何更换苹果iPhone手机电池恢复健康度到100%?
- 淘宝/天猫获取商品历史价格信息 API 返回值说明
- 基于ThinkPHP6搭建的后台管理系统
- matplotlib绘制随机漫步
- Java与咖啡豆 - Java命名由来
- 解决视频资源音乐资源在Android模拟器中不能播放的问题
- POJ1091跳蚤(容斥 + 唯一分解 + 快速幂)
- 误Ghost后的分区恢复
- Android锁屏勒索病毒分析(4)秒抢红包
- 用友服务器的系统管理,用友软件系统管理模块常见问题解析及方法