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

3 形式化关系查询语言

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

文章目录

  • 3 形式化关系查询语言
    • 3.1 关系代数
      • 3.1.1 概述
      • 3.1.2 选择操作
      • 3.1.3 投影操作
      • 3.1.4 集合操作
        • 3.1.4.1 笛卡尔乘积
        • 3.1.4.2 并交差操作
      • 3.1.5 连接操作
      • 3.1.6 更名操作
      • 3.1.7 除操作
      • 3.1.8 外连接
      • 3.1.9 外并操作
      • 3.1.10 赋值操作
      • 3.1.11 练习

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

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

SnoCnoGradeSnoSnameSsex
S01C0192S01王二
S02C0290S02张三
S02C0382S02张三
S03C0180S03李四

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


3.1.6 更名操作

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

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

比如ρ学生表1(学生表)\rho_{学生表1}(学生表)ρ学生表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)σ_{sno = S01}(S)σsno=S01(S)

result ← temp1×temp2

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


3.1.11 练习

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

image-20221018165409444

image-20221018165359408

image-20221018165346818

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android native.js,Android Native与JS通信互调

写在最前&#xff1a;看Android最新技术总结&#xff0c;关注公众号&#xff1a;最近因为App与H5交互逻辑太乱&#xff0c;所以抽空梳理了下&#xff1b;对目前App与H5的各种交互通信做个总结&#xff0c;自取适合自己的交互方式。一、H5调用原生的native方法1、拦截shouldOver…

SharePoint2013 Excel导出好的代码

C#Excel操作类ExcelHelper.cs 来源&#xff1a;http://www.hellocsharp.com/article/67.aspx C#源码世界 发布于&#xff1a; 2014-09-12使用本类之前必须在本机安装了office excel组件或直接下载Microsoft.Office.Interop.Excel.dll文件引用到项目目录下&#xff1a; 然后复制…

基于PMOS的电源防反接电路

如下图所示&#xff0c;是来自TI的参考设计TIDA-00982中的一个电路&#xff0c;功能主要是防止输入反接&#xff0c;R6和C6形成吸收回路&#xff0c;可以对上电过冲有一定的抑制作用。电源正常接入时&#xff0c;PMOS导通&#xff0c;给负载供电&#xff0c;由于VDS的存在&…

计算机组成原理随笔(一)

1 计算机体系结构 计算机革命发展得非常快速&#xff0c;以至于使用老式计算机的很多电影现在看起来十分有年代感&#xff0c;有的电影甚至无法预料后来的计算机是什么样的。 计算机各个组成部分的技术发展非常不均衡&#xff0c;各部分性能差异非常大。在计算机的发展前期&a…

Mongo读书笔记1 -- GridFS

一个Mongo文档最大4M. GridFS不依赖于MongoDB, 其他符合规范的驱动都可以访问它。 GridFS包含两部分&#xff1a;一部分存储文件名和其他metadata; 另一部分存储实际的文件&#xff0c;通常分成一个个大小为256k的小块。 这两个部分通常被命名为files和chunks,在fs命名空间下&a…

简单搭建一个SSM项目(一)

简单搭建一个用户管理的SSM项目框架&#xff0c;虽然也能用servletjdbc搭建更简单的&#xff0c;不过个人感觉工作中更多用的ssm框架项目&#xff0c;这里就简单用ssm来搭建需要的项目吧。 准备工具&#xff1a;eclipse、jdk1.7、Mysql、maven、tomcat。&#xff08;请先确定计…

android wp主题,WP桌面:win10系统的最佳替代安卓应用

WP桌面是信壹网络继刷机大师、ROOT大师和安卓清理大师后重点开发的一款仿windows phone风格的手机桌面应用&#xff0c;从2012年推出至今已获得海内外千万粉丝的好评。这个基于Android开发的手机桌面&#xff0c;这不仅仅体现了WP桌面良好的用户体验&#xff0c;同时也从侧面反…

数据结构杂谈(三)

本文的所有代码均由C编写 如果你已经看完这篇杂谈,你可以前往上一篇杂谈→数据结构杂谈&#xff08;二&#xff09;_尘鱼好美的小屋-CSDN博客 3 单链表 文章目录3 单链表[toc]3.1 单链表的定义3.1.1 引入2.1.2 单链表和顺序表的优劣2.1.3 单链表的代码定义3.2 单链表的初始化3.…

Mac Book Pro不能识别移动硬盘

2019独角兽企业重金招聘Python工程师标准>>> 今天把一台Mac Book Pro重装了一下系统&#xff0c;然后想把移动硬盘上的资料考入电脑&#xff0c;发现插上移动硬盘电脑没有反映。马上搜索解决办法&#xff0c;众说纷纭。因为没重装之前是好的&#xff0c;所以判断为软…

数据库杂谈(四)——关系演算和E-R数据模型

文章目录3 形式化关系查询语言3.2 关系演算和E-R数据模型3.2.1 概述3.2.2 元组关系演算3.2.2.1 概述3.2.2.2 形式化定义3.2.2.3 表达式的安全性3.2.3 域关系演算3.2.4 关于关系演算的习题3.2.5 对传统数据模型的评价3.2.6 E-R数据模型3.2.6.1 基本概念3.2.6.2 E-R图3.2.7 题型总…

小程序获取微信用户绑定的手机号

小程序API内提供getPhoneNumber借口来获取用户已经绑定到微信的手机号,但需要用户主动触发才能发起获取手机号接口&#xff0c;所以该功能不由 API 来调用; 基本流程如下: 使用方法 需要将 <button> 组件 open-type 的值设置为 getPhoneNumber&#xff0c;当用户点击并同…

华为正式发布鸿蒙多久可以用,华为正式发布鸿蒙OS,手机随时能用

8月9日下午&#xff0c;华为在松山湖召开了HDC2019开发者大会&#xff0c;而在此次大会上华为正式发布了传说中的华为鸿蒙系统&#xff0c;也就是Harmony OS。鸿蒙系统它是一个基于微内核的全新全长近分布式的操作系统&#xff0c;它不仅仅局限于某一个设备使用而是可以在其智慧…

WCF rest 的帮助页面和缓存机制

打开vs2010 在工具选项中选择扩展管理器——联机库 安装WCF REST Service Template 40(CS)模板 安装后新建wcf服务应用程序&#xff0c;删除默认建立的文件。 新建RestWcf4HelpPage.svc&#xff0c;代码如下 using System; using System.Collections.Generic; using System.Lin…

数据结构杂谈番外篇——时间复杂度计算

我们先给出推导的方法&#xff0c;然后下面一步一步来推导。 推导大O阶 用常数1取代运行时间中的所有加法常数在修改后的运行次数函数中&#xff0c;只保留最高阶项如果最高阶存在且不是1&#xff0c;则去除这个项相乘的常数所得结果即为大O阶 示例 int sum 0&#xff0c;…

Java学习笔记(二):String

String 在Java中String是作为引用对象存在的一种数据类型&#xff0c;用来保存字符串。 实例化和赋值 //直接声明 String s1 "Hello world!"; //通过构造函数创建, 提供了 11 种不同参数创建的方法 char[] c { h, e, l, l, o, .}; String s2 new String(c); Strin…

数据结构杂谈(一)

在你点进来这里的一瞬间&#xff0c;欢迎你找到了宝藏 这是一些关于数据结构和算法里最详细的阐述和学习心得&#xff0c;我十分乐意和你分享这些知识。 如果你已经看完这篇杂谈&#xff0c;可以前往下一篇→数据结构杂谈&#xff08;二&#xff09;_尘鱼好美的小屋-CSDN博客 1…

计算器排html页面,htmltest~计算器界面的实现

通过divcss和部分布局的作用&#xff0c;实现了&#xff0c;如下效果的计算器展示页面![C%]R$IGDK4J(%3LJXD3]SY.png&#xff0c;废话不多说&#xff0c;最主要的还是分享代码&#xff1a;html&#xff1a;Title.计算器-口 X编辑(E)查看(V)帮助(H)BackspaceCECMC789/sqrtMR456*…

win7 git 添加 ssh key

分两步走&#xff0c;借助git bash客户端&#xff1a;第一步&#xff1a;生成秘钥创建SSH key. 在用户主目录下&#xff0c; 看看有没有.ssh目录&#xff0c; 如果有&#xff0c; 再看看这个目录下有没有id_rsa 和 id_rsa.pub 这两个文件&#xff0c; 如果已经有了&#xff0c;…

解决三星手机EditText背景色的问题

问题描述android:background"#ffffff"其他手机手机背景都是白色&#xff0c;三星却是黑色的。怎么办 解决方案1写个主题测试下 解决方案2检查是三星的手机换背景色解决方案3你自己设置下edittext的背景就好了 解决方案4三星手机没这bug&#xff0c;你的固件不是正常的…

操作系统随笔(二)

如果你还没有读过第一篇随笔&#xff0c;请点击这里→操作系统随笔&#xff08;一&#xff09; 文章目录[toc]2 进程和线程2.1 进程2.1.1 进程模型2.1.2 进程的创建2.1.3 进程的终止2.1.4 进程的层次结构2.1.5 进程的状态2.1.6 进程的实现2.2 线程2.2.1 进程的使用2.2.2 经典的…