首页 > 数据库 >数据库基础4 关系代数运算

数据库基础4 关系代数运算

时间:2024-02-23 23:56:45浏览次数:37  
标签:关系 运算 数据库 投影 元组 代数 连接 属性

基本操作

前提条件:并相容性

是并、差、交等关系代数操作的前提 参与运算的两个关系及其相关属性之间必须又一定的对应性可比性关联性 两个关系的属性数量必须相同 对于任意i,关系R的第i个属性必须与另一个关系的第i个属性的域相同(数据类型、取值范围)

一、传统集合运算 并交差积

1.并运算 U/Union

在关系R中或在关系S中,要去除掉重复的元组 与集合的并运算U相同

2.交运算 倒U/Intersection

与集合的交相同,既属于关系R又属于关系S的元组 取集合的共同部分 交运算可通过差运算实现:

3.差运算 -/Difference

属于R但不属于S的元组 差运算不遵守交换律,R-S与S-R不同(类似减法)  

4.笛卡尔积运算 X(全组合)

广义笛卡尔积,将两个关系中的所有元组,进行所有可能的组合(全组合) 由此可看出“笛卡尔积”的“积”,意义接近于乘法的“积” 操作后广义笛卡尔积的度/目 是 两关系属性数之 元组数(基数)是 两关系元组数目 之积(组合)

二、专门关系演算 选择投影连接除

1.选择 sita

从给定关系中选出某些符合条件的行(元组)构成新关系 纯关系操作 从一个关系R中,给定选择条件表达式Condition(简写con),选择运算的结果也是一个关系 记作sita 条件需要是一个bool类型的表达式(比较表达式) 逻辑运算符:合取(倒V) 析取(V)非() 也可写为 与and 或or 非not && || ! 例:

表达式中操作符优先级:

括号 > 比较 > 非 > 与 > 或  

2.投影 大派(project)

从给定关系中筛选出某些列(属性)构成新关系 从关系R中选出属性包含在集合A中的列构成 从关系中选择出一些属性,并且可以将其重新排列 记作大π,大π后面写投影的要求,一般是选择某列 选择操作 是对于选择出一些行(元组)构成新关系 投影操作 是对于选择出一些列(属性)构成新关系 投影后需去除重复元组!!!!!! 投影后很可能出现重复的元组,需要把重复的元组消除掉 投影与选择嵌套:

3.连接 θ

连接操作由两个关系参与,运算结果也是一个关系 连接运算是一个 笛卡尔积运算 + 按一定条件选择

(1)等值连接

条件为等式的特殊连接 等值连接例子:

(2)自然连接

不写条件的连接,使用一种默认条件:属性相同 + 值相等 自然连接是一种特殊的等值连接 要在结果中去除重复的属性列 例子: 1.对两个表列广义笛卡尔积(所有元组可能的组合) 2.从笛卡尔积中选出相同列(外码?)上值相同的元组 3.去除重复的列 4.再进行投影操作   θ连接和等值连接中,最后得到的结果关系的目数(属性个数),与中间的笛卡尔积完全相同 而自然连接中,最后得到的结果关系的目数(属性个数)会比笛卡尔积少一 因为作为连接的一列会完全重复而被合并 自然连接是使用的最多的连接

7.更名操作 ρ

对表进行重命名 当一个表需要与自身进行连接运算时,通常需要使用更名操作  

扩展操作

扩展操作:能通过基本操作组合实现   参与连接的两个关系需要有可比性 先得出两个关系的所有元组的所有组合,再按给定的条件在所有组合中选择满足条件的保留下来 例子1: 先取全组合,然后剔除不满足组合的 例子2:(包含更名操作) 当一个表需要与自身进行连接操作时,需要进行一个更名操作ρ    

3.关系代数应用

关系代数运算式,从里往外写 特指“某张表的某个属性”,可以用表名+成员访问操作符. 关系代数表达式中,“或||”写作V

矛盾表达式

表达式若写为一个字段同时等于两个值(使用倒V表示&&),这种情况无论如何都不可能实现,选择结果为空集

不等于号<>

!= 在关系代数中写作 <> 总之就是对集合思想的运用 第二种写法也是不对的,因为连接后的“S连接SC”与S不满足并相容性!!!!! 他们的属性数目不同 正确做法:对连接前后的结构都进行同样投影 完成同种投影后,属性数相同,就可以满足并相容性 选择投影连接可以连续使用

总结

1.涉及多个表——连接 2.不能连接——做乘积,然后选择 3.不满足并相容性——做投影  

复杂扩展操作

1.除运算(笛卡尔积运算)

X = B ÷ A 是笛卡尔积 A × X = B 的逆运算 已知A(有冗余列)、B(有冗余记录行),求X

(1)前提条件

S中的所有属性应该是R中的属性 并且R中的属性要多于S中的属性 R属性数>S属性数,R属性组包含S属性组

(2)符号与结果类型

除运算记作÷,其结果也是一个属性

(3)结果的属性构成

在R中去除S中的属性,剩余的属性就是R÷S结果中的属性

(4)结果的元组构成

结果中的每一个元组,与S中的每一个元组,组合(笛卡尔积)起来的元组必须是R中的元组 首先把R在(R-S)上做投影 对于S中每一个元组u,他与结果t中每一个元组,组合起来必须是R中的元组  

(5)使用基本操作表达

全投影 - 组合起来不在R中的投影 = 满足条件的投影 组合起来不在R中的投影 = 组合 - R 所以:R÷S = 全投影 - 投影(组合 - R)

(6)实例示范

先判断结果的属性构成 再判断结果的元组构成   若S有两个 要保证结果与S的全组合都在R中能找到 若S中有四个元组 S有两个属性的情况   (7)应用场景 查询XX全部XXX 出现全部二字,大概率可以使用除运算  

2.外连接操作

由于连接时,若两表中有对方不存在的元组,会造成信息的丢失 外连接能防止元组信息的丢失 用空值(NULL、?)填充未知信息

外连接的扩展

对哪边开口就保留哪边的元组信息不丢失 左右外连接结果元组数 = 开口方元组数  

应用案例

左外连接:

右外连接:

全外连接:

 

衔接数据库语言SQL

数据库语言就是将关系代数语言转换为类似英语的语言   查询程序就是关系代数基本操作的组合  

标签:关系,运算,数据库,投影,元组,代数,连接,属性
From: https://www.cnblogs.com/jk-2048/p/18030597

相关文章

  • 数据库基础5 关系演算
    “关系代数是基于集合的查询”“关系演算是基于逻辑的查询”他们共同构成了数据库结构化查询语言SQL的基础关系演算概述关系演算是以谓词演算为基础的 关系元组演算1.公式的递归构造sitar:比较运算(>、<、>=、<=、!=、==)只有这几条之内的,属于【公式】所有公式都是由......
  • 数据库基础6 SQL语言概述
    SQL语言引导词DDL:数据库定义语言DML:数据库操作语言DCL:数据库控制语言1.DDL语句引导词数据库定义语言用于各种对象的定义和删除,操作对象是表2.DML语句引导词数据库操作语言:增删改查,操作对象是记录3.DCL语句引导词数据库控制语言,操作对象是用户权限 常用数据库1.......
  • 数据库基础1 数据库系统概述
    1.1四个基本概念1.数据定义  2.数据库定义  3.数据库管理系统DBMS数据库管理系统是介于操作系统与用户之间的DBMS主要功能:  4.数据库系统定义与构成:在不引起歧义的情况下,将数据库系统简称为数据库 1.2数据管理技术的产生和发展什么是数据管......
  • pymysql连接数据库和sqlite
    如果使用mysql,需要配置如下: -1配置文件中配置:settings.py DATABASES={'default':{'ENGINE':'django.db.backends.mysql','NAME':'数据库名字','HOST':'127.0.0.1'......
  • ES6扩展运算符(...)
    在ES6中,扩展运算符(...)是一种用来展开数组和对象的语法。它可以将一个数组或对象展开,以便在函数调用、数组字面量或对象字面量中使用。1//1.在数组中的应用:2letarr=[1,2,245,6]3letarr1=[...arr,3,5,7]4console.log(arr1)//[1,2,245,6,3,5,7]56......
  • C++的箭头运算符
    以前学类的时候,一个指针指向类的实例,当我们想通过指针访问某些类的成员的时候,书上直接告诉你,使用->来访问这些成员,不能用.运算符。我以前也是默默接受了这个观点,平时也没细想,今天才知道是怎么回事。string*p=string("hello");*p.empty();//错误。会先执行p.empty(),之后再......
  • 项目mysql转换为kingbase人大金仓数据库
    项目mysql转换为kingbase人大金仓数据库目录项目mysql转换为kingbase人大金仓数据库官网已遇到的需要进行替换的部分UUID()部分进行分组并加以排序选择mysqlkingbase——row_number()排序函数列为null时的排序规则不同用到groupby的话,select的数据要进行分组my......
  • 八、井号运算符
    八、井号运算符其实,C语言允许在字符串中包含宏参数。在类函数宏(带参宏)中,#号作为一个预处理运算符,可以把记号转换成字符串。例如,如果A是一个宏形参,那么#A就是转换为字符串"A"的形参名。这个过程称为字符串化(stringizing)。如下为示例程序:#include<iostream>#defineADD......
  • Qt使用mysql数据库
    此内容来自网络,有一定参考作用吧1.官网下载链接:https://dev.mysql.com/downloads/mysql/5.7.html2.下载解压上面的mysql,后更改Qt源码目录的两处路径配置3.打开QT安装路径下的源码C:\Qt\5.15.1\Src\qtbase\src\plugins\sqldrivers\mysql双击用QTCreator打开mysql.pro(1)打开mysql......
  • iPaaS生成数据库接口只要60秒?
    “iPaaS生成数据库接口只要60秒?”关于“iPaaS生成数据库接口只要60秒?”的说法,这实际上反映了iPaaS解决方案的一个重要优势:高效率。确实,借助iPaaS平台的现成集成工具和模板,用户可以迅速创建连接到特定数据库的接口。低代码开发平台提供了一个简化的、图形化的编程环境,允许开发者......