数据库原理(关系代数)

news2024/11/24 15:23:08

1.集合运算符基础

要求:

  • 具有相同的目n(即两个关系都有n 个属性)
  • 相应的属性取自同一个域
  • t是元组变量, t \inR表示t是R的一个元组

1.1并

符号(\cup

R∪S = { t|t \in R∨t \inS }

结果特征:

  • 仍为n 目关系,由属于R 或属于S 的元组组成
  • 一个元组在并集中只出现一次,运算结果须消除重复值

例如:

1.2差

符号(-)

R-S={t| t \in R \wedge t \notin S}

结果特征:

  • 仍然为n目关系,由输入R但不属于S的元组组成

1.3笛卡尔积

符号(\times

R×S = {\overbrace{t_{r}t_{s}} |t_{r}\in R \wedge t_{s}\in S }

1.3.1过程

  • R: n目关系,k1个元组
  • S: m目关系,k2个元组

R×S运算结果也是一个关系:

列:(n+m)列元组的集合量(R x S是n+m度关系)

  • 元组的前n列是关系R的一个元组
  • 后m列是关系S的一个元组

行:k1×k2个元组( R×S的基数)

例如:

2.专门的关系运算

2.1表示记号

2.2选择(Selection)

符号(\sigma

\sigma_{F}\left ( R \right )={t | t \in R \wedge F(t)='true')}

  • F:选择条件,是一个逻辑表达式
  • 选择运算是从行的角度进行的运算

2.2.1例题

查询信息系(IS系)全体学生:

\sigma _{Sdept ="IS"}(Student)

结果:

2.3投影(Projection)

符号(\pi

\pi_{A}(R)=\left \{ t[A] | t\in R \right \}

  • A:R 中的属性列
  • 投影操作主要是从列的角度进行运算
  • 但投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)

2.3.1例题

1.查询学生的姓名和所在系。 即求Student关系上学生姓名和 所在系两个属性上的投影。

\pi_{Sname,Sdept}\left ( R \right )

结果:

2.查询学生关系Student中都有哪些系

\pi_{Sdept}\left ( R \right )

结果:(注意,此时自动要消除重复的元组)

2.4连接(Join)

符号(\Join

2.4.1连接也称为θ连接

  • 从两个关系的笛卡尔积中选取属性间满足一定条件的元组
  • 其本质是笛卡尔积的子集

2.4.2等值连接(equijoin)

  • θ为“ = ”的连接运算称为等值连接

2.4.3自然连接(Natural join)

  • 两个关系中进行比较的分量必须是相同的属性组
  • 在结果中把重复的属性列去掉

2.4.4例题

R
ABC
a1b15
a1b26
a2b38
a2b412
S
BE
b13
b27
b310
b32
b52

等值连接:

自然连接:

2.5除(Division)

2.5.1象集

给定一个关系R(X,Z),X和Z为属性组。当t [X]=x时,x在R中 的象集(Images Set)为:

它表示R中属性组X上值为x的诸元组在Z上分量的集合。

注意:可以这样理解,把A看成X可取值a1,a2。B看成Y,有关系Y=F(X),当X取a1时,自变量Y(B)可以取b1,b2。

象集的本质是一次选择运算一次投影运算

2.5.2除

  • 给定关系R (XY) 和S (YZ),其中X,Y,Z为属性组。
  • R中的Y与S中的Y可以不同的属性名,但必须出自相同的域集
  • R与S的除运算得到一个新的关系P(X),P 是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Y_{x}包含S在Y上投影的集合。

例如:

为了方便理解,我做以下解释:

除操作比较抽象,我们可以把它理解为一种筛选,这中筛选包括“至少”、“全部”。

也可以把它类比成数学中的除法:“被除数 \div 除数 = 结果”,其中先寻找1、要根据什么内容(记为A1)筛选,如上面的例子根据(B、C)来筛选,2、再寻找在哪里面筛选(筛选什么?)(记为A2),上面是在R中筛选。3、如何筛选(记为\div),筛选A属性中对应的B、C包括全部的S中B、C属性的A属性。上面可以表示为A2 \div A1=?。

2.5.3例题

(关系都在2.2.1例题)

(一)查询至少选修1号课程和3号课程的学生号码

分析:

           1、要根据什么内容筛选?——根据课程号(1号、3号)筛选

           2、筛选什么?——筛选学生学号(在关系Student中)

           3、如何筛选?——找到 关系(学号,课程号)\div 关系(课程号={1、3})

step1:首先建立一个临时关系K(K={1,3})

step2:再求:\pi_{Sno,Con}\left ( SC \right )     (注意:因为只要学号,所以可以进行投影除学号(Sno)和课程号(Cno)这两个属性)

step3:\pi_{Sno,Con}\left ( SC \right )\div K

(二) 查询选修了2号课程的学生的学号

这个比较简单,可以直接用选择和投影。

\pi_{Sno}\left ( \pi_{Cno=2}\left ( SC \right ) \right )

  (三)   查询至少选修了一门其直接先行课为5号课程的学生姓名

这里需要注意的是,学生姓名和先行课课号没有直接联系

分析:

  • 1、要根据什么内容筛选?——根据先行课(5号)筛选
  • 2、筛选什么?——筛选学生姓名(在关系Student中)
  • 3、如何筛选?——找到 关系(学号,课程号,先行课)\div 关系(先行课=5),接下来再连接、投影出学生姓名。

但是需要注意的是如何构建    关系(学号,课程号,先行课)   和关系(先行课=5)

step1:首先将Course和SC进行自然连接得到  关系(学号,课程号,成绩,课程名,先行课,学分),再将其投影成 关系(学号,课程号,先行课)

step2:选择Course中先选择 关系(先行课=5)

step3:关系(学号,课程号,先行课)\div 关系(先行课=5),再投影出学号,将学号与Student自然连接,接着投影出姓名。

解二:

\pi_{Sname}(\sigma _{Spno=5} (Course) \Join SC) \Join \pi_{Sno,Sname} (Student))

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

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

相关文章

长度为n的数组a初始值全为0,目标是把数组a变为数组b(1<=bi<=n), 可以进行任意次操作:选择长度为k的数组c,(1<=ci<=n且两两不同)

对于1<i<k, 把 a[c[i]] 改为c[i % k 1]。给定n&#xff0c;k和数组b&#xff0c;判断能否得到数组b。 题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #d…

python使用zmail实现邮件发送

一&#xff1a;zmail介绍 1、Zmail的优势 自动填充大多数导致服务端拒信的头信息&#xff08;From To LocalHost之类的)将一个字典映射为email&#xff0c;构造信件就像构造字典一样简单自动寻找邮件服务商端口号地址&#xff0c;自动选择合适的协议&#xff08;经过认证的&am…

docker 安装 portainer

小编给友友们总结了一下 Portainer 的好处以下 Portainer是Docker的图形化管理工具&#xff0c;提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作&#xff08;包括上传下载镜像&#xff0c;创建容器等操作&#xff09;、事件日志显示、容器控制台操作、Swar…

CAPL - 如何实现弹窗提示和弹窗操作

目录 函数介绍 TestWaitForTesterConfirmation Example 使用方法一 使用方法二

Hack The Box-Perfection

目录 信息收集 nmap dirsearch gobuster whatweb WEB 信息收集 ffuf 漏洞探索 漏洞发现 模板注入 反弹shell 提权 get user and flag 信息收集 ssh登录&get root and flag 信息收集 nmap 端口探测┌──(root㉿ru)-[~/kali/hackthebox] └─# nmap -p- 10…

Maven入门(作用,安装配置,Idea基础maven,Maven依赖,Maven构建项目)【详解】

目录 一. Maven的作用 1.依赖管理 2.统一项目结构 3.项目构建 二.Maven安装配置 1. Maven的仓库类型 2 加载jar的顺序 3. Maven安装配置 4.安装Maven 5.配置仓库 三.idea集成maven 1.给当前project集成maven 2.给新建project集成maven 3.创建maven项目 4.pom…

python高级之元类

python高级之元类 一、Type创建类1、传统方式创建类2、非传统方式 二、元类三、总结 一、Type创建类 class A(object):def __init__(self, name):self.name namedef __new__(cls, *args, **kwargs):data object.__new__(cls)return data根据类创建对象 objA(‘kobe’) 1、执…

前端处理接口直接返回的图片

有时候接口会直接返回图片而不是连接&#xff0c;前端需要处理后才能使用。 首先你可能需要设置responseType: blob’处理响应数据格式。 直接使用 将接口及参数动态拼接成img.src直接使用 <img src"http://test.com/api/img?size50x50" alt"">i…

Spring Webflux 详解

目录 0、组件对比 1、WebFlux 1、引入 2、Reactor Core 1、HttpHandler、HttpServer 3、DispatcherHandler 1、请求处理流程 4、注解开发 1、目标方法传参 2.返回值写法 5、文件上传 6、错误处理 7、RequestContext 8、自定义Flux配置 9、Filter WebFlux&am…

python并发编程:阻塞IO

阻塞IO&#xff08;blocking IO&#xff09; 在Linux中&#xff0c;默认情况下所有的socket都是blocking&#xff0c;一个典型的读操作流程大概是这样&#xff1a; 当用户进程调用了recvfrom这个系统调用&#xff0c;kernel就开始了IO的第一个阶段&#xff1a;准备数据。对于…

将Remix和本地文件连接

Remix连接本地文件 推荐使用网页版本的Remix&#xff0c;因为它是实时更新的&#xff0c;还可以连接MetaMask直接进行使用。 打开remix网页&#xff0c;可以通过 create a new workspace新建页面 然后找到我们要连接 的文件目录&#xff0c;在该目录中打开终端&#xff0c;如…

Pytorch学习 day05(RandomCrop、Transforms工具使用总结)

RandomCrop 将PIL或Tensor格式的输入图片&#xff0c;随机裁剪指定尺寸的部分输入尺寸可以为序列或单个整形数字代码如下&#xff1a; from PIL import Image from torchvision import transforms from torch.utils.tensorboard import SummaryWriterimg Image.open("i…

通过hyperbeam创建梁单元截面属性

1、为模型中标准的圆柱形创建梁单元和赋予属性&#xff1b; 2、为模型中不标准的对称性实体创建梁单元和赋予属性&#xff1b; 3、为模型中壳体部分创建梁单元和赋予属性&#xff1b;

C++进阶之路---继承(一)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、继承的概念及定义 1.继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0…

MybatisPlus入门详解

一、MyBatisPlus 简介 1.1 创建新模块 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency> 由于mp并未被收录到idea的系统内置配置,无法…

外包干了2年,技术退步明显

先说一下自己的情况&#xff0c;研究生&#xff0c;19年进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

Android开发中遇到最难的问题,app架构图

前言 这份Android面试真题涵盖了图片&#xff0c;网络和安全机制&#xff0c;网络&#xff0c;数据库&#xff0c;插件化、模块化、组件化、热修复、增量更新、Gradle&#xff0c;架构设计和设计模式&#xff0c;Android Framework 、Android优秀三方库源码等。适合中高级工程…

Windows安装MySQL详细教程

1.1 下载MySQL压缩包 官网下载链接[点击跳转] 按图中选择&#xff0c;然后点击【Download】 点击图中箭头所指方向直接下载 1.2 解压下载好的压缩包后找到【bin】文件夹&#xff0c;并记下文件路径&#xff08;下文将以路径 D:\mysql-8.0.36-winx64\bin 为例&#xff09; 1.…

JavaScript实现点击鼠标弹钢琴的效果

思路&#xff1a; 图片设置宽900px&#xff0c;找到鼠标按下时的x坐标和img距离body的x坐标&#xff0c;两个值相减&#xff0c;然后除100取整&#xff0c;赋值给a&#xff0c;通过判断a的值来确定放出那个音乐。 完整代码&#xff1a; <!DOCTYPE html> <html lan…

【DAY05 软考中级备考笔记】线性表,栈和队列,串数组矩阵和广义表

线性表&#xff0c;栈和队列&#xff0c;串数组矩阵和广义表 2月28日 – 天气&#xff1a;阴转晴 时隔好几天没有学习了&#xff0c;今天补上。明天发工资&#xff0c;开心&#x1f604; 1. 线性表 1.1 线性表的结构 首先线性表的结构分为物理结构和逻辑结构 物理结构按照实…