MOOC 数据库笔记(四):关系代数
关系代数
关系代数概述
特点
基于集合,提供了一系列的关系代数操作:并、差、笛卡尔积(广义积)、选择、投影和更名等基本操作
以及交、连接和关系除等扩展操作,是一种集合思维的操作语言。
关系代数操作以一个或多个关系为输入,结果是一个新的关系。
用对关系的运算来表达查询,需要指明所用的操作,具有一定的过程性。
∩∪×-ρσΠ÷⋈(从左往右分别为:并、交、广义积(笛卡尔积)、差、更名、选择、投影、除、连接)θ ∨∧
Π姓名、课程名(σ课程号=c2(R⋈S))
是一种抽象的语言,是学习其他数据库语言,如SQL等的基础。
关系代数的基本操作
可分为:集合操作和纯关系操作
(1)集合操作
①UNION(并) R∪S
②INTERSECTION(交) R∩S
③DIFFERENCE(差) R-S
④CARTESIAN PRODUCT(笛卡尔积) R×S
(2)纯关系操作
①PROJECT(投影) ΠA(R)
②SELECT(选择) σCon(R)
③JOIN(连接) R⋈(AθB)S
④DIVISION(除) R÷S
关系代数之基本操作
(0).并相容性
某些关系代数操作,如并、差、交等,需满足“并相容性”
参与运算的两个关系及相关属性之间有一定的对应性、对比性或意义关联性。
定义:关系R与关系S存在相容性,当且仅当:
(1)关系R和关系S的属性数目必须相同;
(2)对于任意i,关系R的第i个属性的域必须和关系S的第i个属性的域相同
假设:R(A1,A2,...,An),S(B1,B2,...,Bm)
R和S满足并相容性:n=m并且Domain(Ai)=Domain(Bi)
(1).并(UNION)
定义:假设关系R和关系S是并相容的,则关系R与关系S的并运算结果也是一个关系,记作:R∪S,它由或者出现在关系R中,或者出现在S中的元组构成。
数学描述:R∪S={t|t∈R∨t∈S},其中t是元组
并运算是将两个关系的元组合并成一个关系,在合并时去掉重复的元组。
R∪S与SUR运算的结果是同一个关系。
汉语中的“或者...或者...”通常意义是并运算的要求。
(2)差(DIFFERENCE)
定义:假设关系R和关系S是并相容的,则关系R与关系S的差运算结果也是一个关系,记作:R-S,它由或者出现在关系R中但不出现在S中的元组构成。
数学描述:R-S={t|t∈R∧t?S},其中t是元组
R-S与S-R是不同的
汉语中的“是...但不含...”通常意义是差运算的要求。
(3)广义笛卡尔积(CARTESIAN PRODUCT)
定义:关系R(<a1,a2,...,an>)与关系S(<b1,b2,...,bm>)的广义笛卡尔积(简称广义积,或者积或者笛卡尔积)运算结果也是一个关系,记作:R×S,它由关系R中的关系S的元组进行所有可能的拼接(或串接)构成。
数学描述:R×S={<a1,a2,...,an,b1,b2,...,bm>|<a1,a2,...,an>∈R∧<b1,b2,...,bm>∈S}
当一个检索设计到很多表时(如学生表和课程表),便需要将这些表串接或拼接起来,染后才能检索,这时,就要使用广义笛卡尔积运算
是后面学习各种连接运算的基础。
R×S=S×R
两个关系R和S,它们的属性个数分别为n和m,元组个数分别为x和y(R是n度关系,S是m度关系)。
则笛卡尔积R×S的属性个数=n+m。
则笛卡尔积R×S的元组个数=x×y。
(4)选择(SELECT)
定义:给定一个关系R,同时给定一个选择的条件condition(简记con),选择运算结果也是一个关系,记作σcon(R),它从关系R中选择出满足给定条件condition的元组构成。
数学描述:σcon(R)={t|t∈R∧con(t)=true},
设R(A1,A2,...,An),t是R的元组,t的分量记为t[Ai],或者简写为Ai
条件con由逻辑运算符连接比较表达式组成(逻辑运算符∨,∧,┐,或者写为and,or,not)
比较表达式:XθY,其中X,Y是t的分量、常量或简单函数,θ是比较运算符,θ∈{>,≥,<,≤,=,≠}。
(5)投影(PROJECT)
定义:给定一个关系R,投影运算结果也是一个关系,记作ΠA(R),它从关系R中选出属性包含在A中的列构成。
数学描述:ΠAi1,Ai2,...,Aik(R)={<t[Ai1],t[Ai2],...,t[Aik]>|t∈R}
设R(A1,A2,...,An)
{Ai1,Ai2,...,Aik}∈{A1,A2,...,An}
t[Ai]表示元组t中相应于属性中的分量。
投影运算可以对原关系的列在投影后重新排列
投影操作从给定关系中选出某些列组成新的关系,而选择操作是从给定关系中选出某些行组成新的关系。
关系代数之扩展操作
(1)交(INTERSECTION)
定义:假设关系R和关系S是并相容的,则关系R与关系S的交运算结果也是一个关系,记作:R∩S,它由同时出现在关系R和关系S中的元组构成。
数学描述:R∩S={t|t∈R∧t∈S},其中t是元组
R∩S和S∩R的运算结果是同一个关系。
交运算可以通过差运算来实现:
R∩S=R-(R-S)=S-(S-R)
汉语中的“既...又...”,“...,并且...”通常意义是交运算的要求。
(2)θ-连接(θ-JOIN,theta-JOIN)
投影与选择操作只是对单个关系(表)进行操作,而实际引用中往往涉及多个表之间的操作,这就需要θ-连接操作。
定义:给定关系R和关系S,R与S的θ连接运算结果也是一个关系,记作R⋈S(AθB),它由关系R和关系S的笛卡尔积中,选取R中属性A与S中属性B之间满足θ条件的元组构成。
数学描述:R⋈S(AθB)=σt[A]θs[B](R×S)
设R(A1,A2,...,An),A∈{A1,A2,...,An}
设S(A1,A2,...,An),B∈{A1,A2,...,An}
t是关系R中的元组,s是关系S中的元组
属性A和属性B具有可比性。
θ是比较运算符,θ∈{>,≥,<,≤,=,≠}
在实际引用中θ-连接操作经常与投影、选择操作一起使用。
关系与自身的θ-连接
有时在使用连接操作时我们需要自连接。这时候我们就要用到更名操作ρ。
使用ρ进行更名操作,ρnname(oname)
其中nname为新的名字,oname为以前的名字。
等值连接(Equi-Join)
当θ为=,就是等值连接,等值连接是θ-连接的一个特例(区别于自然连接)。
(1)自然连接(Natural-Join)
定义:给定关系R和关系S,R与S的而自然连接运算也是一个关系,记作R⋈S,它由关系R和关系S的笛卡尔积中,选取相同属性组B上相等的元组所构成。
数学描述:R⋈S=σt[B]=s[B](R×S)
自然连接是一种特殊的等值连接。
要求关系R和关系S必须有相同的属性组B(如R,S共有一个属性B1,则B是B1,如R,S共有一组属性B1,B2,...,Bn,则B是这些共有的所有属性)
R,S属性相同,值必须相等才能连接,即:
R.B1=S.B1 AND R.B2=S.B2 ... R.Bn=S.Bn才能连接。
要在结果中去掉重复的属性列(因结果中R.Bi始终是等于S.Bi所以可只保留一列即可)。
关系代数之复杂扩展操作
(1)除(Division)
除法运算常用于求解“查询...全部的/所有的...”问题
前提条件:给定关系R(A1,A2,...,An)为n度关系,关系S(B1,B2,...,Bm)为m度关系。如果可以进行关系R与关系S的除运算,当且仅当:属性集{B1,B2,...,Bm}是属性集{A1,A2,...,An}的真子集,即m<n。
定义:关系R和S的除运算结果也是一个关系,记作R÷S,分两部分来定义。
先定义R÷S结果的属性应有哪些?
设属性集{C1,C2,...,Ck}={A1,A2,...,An}-{B1,B2,...,Bm},则有k=n-m则R÷S的结果关系是k度关系,由{C1,C2,...,Ck}属性构成。
再定义R÷S的元组怎样组成?
再设关系R(a1,a2,...,an)和关系S(b1,b2,...,bm),那么R÷S结果关系为元组<c1,c2,...,ck>的集合,元组<c1,c2,...,ck>满足下列条件:
它与S中每一个元组<b1,b2,bm>组合形成的一个新元组都是R中的某一个元组<a1,a2,...,an>。(其中,a1,...,an,b1,...,bm,c1,...,ck分别是属性A1,...,An,B1,...,Bm,C1,...,Ck的值)
数学描述:R÷S={t|t∈ΠR-S(R)∧∀u∈S(tu∈R)}=ΠR-S(R)-ΠR-S((ΠR-S(R)×S)-R)
(1)外连接(Outer-Join)
外连接问题的提出:有时在进行自然连接操作时会忽略掉没有某一项属性的元组,而我们恰恰需要整理出所有元组,这时候我们就需要外连接。
定义:两个关系R与S进行连接时,如果R(或S)中的元组在S(或R)中找不到相匹配的元组,则为了避免该元组信息丢失,从而将该元组与S(或R)中假定存在的全为空值的元组连接,放置在结果关系中,这种连接称之为外连接(Outer Join)。
外连接=自然连接(或θ连接)+失配的元组(与全空元组形成的连接)
外连接的形式:左外连接、右外连接、全外连接。
左外连接=自然连接(或θ连接)+左侧表中失配的元组
右外连接=自然连接(或θ连接)+右侧表中失配的元组
全外连接=自然连接(或θ连接)+两侧表中失配的元组
左外连接(Left Outer join)记为:R⋊S
右外连接(Right Outer Join)记为:R⋉S
全外连接(Full Outer Join)记为:R⋈S
MOOC 数据库笔记(四):关系代数的更多相关文章
- MOOC 数据库笔记(三):关系模型之基本概念
关系模型的基本概念 关系模型简述 1.最早由E.F.Codd在1970年提出. 2.是从表(Table)及表的处理方式中抽象出来的,是在对传统表及其操作进行数学化严格定义的基础上,引入集合理论与逻辑学 ...
- MySQL数据库笔记四:MySQL的约束
<1>概念 是一种限制,它是对表的行和列的数据做出约束,确保表中的数据的完整性和唯一性. <2>使用场景 创建表的时候,添加约束 <3>分类 1. default: ...
- MOOC 数据库笔记(五):关系演算
关系演算 概述 (这部分的内容大多与离散数学有关,我没有相关基础,所以现在只是简单看一下) 关系演算是以数理逻辑中的谓词演算为基础的. 关系演算是描述关系运算的另一种思维方式. SQL语言是继承了关系 ...
- HITsz 数据库笔记
这是 HITsz 数据库笔记,欢迎到我的 GitHub 上查看,有笔记说明和源码,作业和实验报告,希望对你有帮助 博客园显示图片异常 数据库基本概念 数据抽象 通过抽象来对用户屏蔽复杂性,以简化用户与 ...
- SQL Server 2012 数据库笔记
慕课网 首页 实战 路径 猿问 手记 Python 手记 \ SQL Server 2012 数据库笔记 SQL Server 2012 数据库笔记 2016-10-25 16:29:33 1 ...
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
c#实例化继承类,必须对被继承类的程序集做引用 0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...
- MySql学习笔记四
MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...
- 官网实例详解-目录和实例简介-keras学习笔记四
官网实例详解-目录和实例简介-keras学习笔记四 2018-06-11 10:36:18 wyx100 阅读数 4193更多 分类专栏: 人工智能 python 深度学习 keras 版权声明: ...
- openresty 学习笔记四:连接mysql和进行相关操作
openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...
随机推荐
- nginx rewrite规则说明
格式:rewrite regex replacement [flag] * rewrite配置可以在server.location以及if配置段内生效 * regex是用于匹配URI的正则表达式,其不 ...
- allure 2
项目地址 https://github.com/allure-framework/allure2/releases 安装文档 https://docs.qameta.io/allure/#_insta ...
- 避免MySQL出现重复数据处理方法
对于常规的MySQL数据表中可能存在重复的数据,有些情况是允许重复数据的存在,有些情况是不允许的,这个时候我们就需要查找并删除这些重复数据,以下是具体的处理方法! 方法一:防止表中出现重复数据 当表中 ...
- 【Beta阶段】第八次Scrum Meeting
每日任务内容 队员 昨日完成任务 明日要完成的任务 张圆宁 #63 技术博客--django和mysqlhttps://github.com/rRetr0Git/rateMyCourse/issues ...
- 【转】Android Fastboot 与 Recovery 和刷机
1. 首先来看下Android系统的分区: Android系统的分区.jpg Android分区解释.png 安卓系统一般把rom芯片分成7个区,如果再加上内置sd卡这个分区,就是8个: hb ...
- win10教育版永久激活密钥 win10教育版激活码 win10教育版产品密钥2018(第三种方法亲测可用!)
有没有最新win10教育版激活密钥?win10教育版功能比较全面,增加了一些学术上需要的功能.有用户装了win10教育版,提示需要产品密钥,网上找到的win10教育版永久激活码大多失效,这边小编为大家 ...
- New & make in go_Code
概述 Go 语言中的 new 和 make 一直是新手比较容易混淆的东西,咋一看很相似.不过解释两者之间的不同也非常容易. 他们所做的事情,和应用的类型也不相同. 二者都是用来分配空间. new 函数 ...
- asp.netcore Log4Net连接kafka的方法
1.NuGet添加2个包: Microsoft.Extensions.Logging.Log4Net.AspNetCore log4net.Kafka.Core 2.Program里修改CreateW ...
- HDFS java API TROUBLESHOOTING
官方文档:https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/SingleCluster.html 配置免密 ...
- 深度相机Astra Pro测试教程
最近在微信群内,很多群友在群友的推荐下,购买了Astra pro的深度相机,价格地道,物超所值!群友反馈积极,所以这里出一波简单的教程. 以下内容知识抛砖引玉,主要讲解windows下和Ubunt ...