2.4 关系代数 数据库系统概论

news2024/11/26 12:07:15

目录

2.4.1 传统的集合运算 (二目运算)

(1) 并(Union)

(2)差(Except)

(3) 交(Intersection)

(4) 笛卡尔积

2.4.2 专门的关系运算

专门的关系运算:几个记号

专门的关系运算

1.选择

2. 投影(Projection)

3. 连接(Join)

连接:等值连接

自然连接

悬浮元组(Dangling tuple)

外连接(Outer Join)

4. 除运算(Division)


关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。关系代数运算对象是关系,运算结果也是关系,关系代数的运算符有两类:集合运算符和专门的关系运算符

传统的集合运算是从关系的“水平”方向,即行的角度进行专门的关系运算不仅涉及行而且涉及列。比较运算符和逻辑运算符用来辅助专门的关系运算符进行操作。

2.4.1 传统的集合运算 (二目运算)

前提(交并差)设关系R和关系S具有相同的目  n(即两个关系都有n个属性),且相应的属性取自同一个域,𝑡 是元组变量, 𝑡 ∈ 𝑅 表示𝑡是R的一个元组。

(1) 并(Union)

 关系R和关系S的并记作:

 R\cup S=\left \{ t|t\varepsilon R\vee t\varepsilon S \right \} 。

结果仍为n目关系,由属于R或属于S的元组组成。

注意并非R或S属性都必须相同,只要取在同一个域中即可。而组成的列数应还为n(依然为n目关系)。

(2)差(Except)

 R - S :关系R和关系S的差记作:

仍为n目关系,由属于R而不属于S的所有元组组成

(3) 交(Intersection)

  R∩S:关系R和关系S的交记作:

仍为n目关系,由既属于R又属于S的元组组成,R ∩ S = R – ( R - S )

(4) 笛卡尔积

和我们之前章节中提到的笛卡尔积相同。

2.4.2 专门的关系运算

专门的关系运算:几个记号

先引入几个记号

(1)R, t∈R ,  t\left [ Ai \right ] 

设关系模式为 R(A1,A2,…,An )

它的一个关系设为R

t∈R表示t是R的一个元组

t[Ai ]则表示元组t中相应于属性Ai的一个分量。

(2)

可以参照集合的思想来理解。

(3)

(4)

给定一个关系R(X,Z),X和Z为属性组。

当t[X]=x时,x在R中的象集(Images Set)为: Zx ={t[Z]|t ∈ R,t[X]=x}

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

举例:

专门的关系运算

1.选择

含义:在关系R中选择满足给定条件的诸元组。

记做:

选择条件是一个逻辑表达式,取值为“真”或“假”。

基本形式为:X1 θ Y1

θ表示比较运算符,它可以是>,≥,<,≤,=或<>

X1,Y1是属性名,或者常量,或者简单函数

在基本的选择条件上,还可以用逻辑运算符非¬,与∧,或∨ 连接各条件表达式。(涉及多个条件的情况)

理解为在表内查询符合条件 f 的一整个(或多个)元组(行)

选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算。

2. 投影(Projection)

含义:从R中选择出若干属性列组成新的关系

记作:

A:R中的属性列

投影操作主要是从列的角度进行运算。

投影之后不仅取消了原关系中的某些列,因为取消了某些列,可能出现重复的行,应取消这些重复元组。(之所以出现重复行是因为投影所造成的信息丢失)。

3. 连接(Join)

也称为θ连接

含义:从两个关系的笛卡尔积中选取属性间满足一定条件的元组。

连接运算从R和S的广义笛卡尔积R×S中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系θ的元组。

理解:在笛卡尔积张成的空间中选取符合条件的列,和选择有些像但是选择是单表,而笛卡尔积是进行两表的交互。

连接:等值连接

两类常用连接运算:等值连接,自然连接。

自然连接

自然连接是一种特殊的等值连接

两个关系中进行比较的分量必须是同名的属性组

在结果中把重复的属性列去掉。

一般连接操作是从行的角度进行运算,自然连接还需要取消重复列,是同时进行行和列的运算。

悬浮元组(Dangling tuple)

两个关系R和S在做自然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组

外连接(Outer Join)

如果把悬浮元组也保存在结果关系中,而在其他属性上填空值 (Null),称为外连接

左外连接(LEFT OUTER JOIN或LEFT JOIN),只保留左边关系R中的悬浮元组。右外连接(RIGHT OUTER JOIN或RIGHT JOIN),只保留右边关系S中的悬浮元组。

4. 除运算(Division)

定义:给定关系𝑅(𝑋, 𝑌) 和𝑆(𝑌, 𝑍) ,其中𝑋, 𝑌, 𝑍为属性组。R中的Y与S 中的Y可以有不同的属性名,但必须出自相同的域集。

R与S的除运算得到一个新的关系P(X),P 是 R 中满足下列条件的元组在 X 属性列上的投影:元组在X上分量值𝑥的象集𝑌𝑥包含S在Y上投影的集合。

记做:

含义:设关系R除以关系S的结果为关系T,则T包含所有在R中但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中。

运用:解决“至少”的问题,首先我们被除数所得象集必须包含除数,因此我们得到的结果的组的象集是“至少”问题的答案。

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

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

相关文章

wait 和 notify方法

目录 1.1 wait()方法 wait 做的事情: wait 结束等待的条件: 1.2 notify()方法 1.3notifyAll方法 1.4wait()和sleep()对比 由于线程之间是抢占式执行的, 因此线程之间执行的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执行先后顺序. 完成这个协调…

工具-百度云盘服务-身份认证

目标 通过百度网盘API的方式去获取网盘中的文件&#xff0c;要实现这的第一步就是需要获取网盘的权限。资料(参考) 如果期望应用访问用户的网盘文件&#xff0c;则需要经过用户同意&#xff0c;这个流程被称为“授权”。百度网盘开放平台基于 OAuth2.0 接入授权。OAuth2.0 是…

Promise图解,Pass

10-优化代码_哔哩哔哩_bilibili

STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹

STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹前言第1章 添加文件夹第2章 添加文件路径2.1 相对路径方法2.2 绝对路径方法 总结 前言 在编程的过程中&#xff0c;如果需要在原有的工程基础上新增其它的…

【Java从入门到精通】Java数组

数组对于每一门编程语言来说都是重要的数据结构之一&#xff0c;当然不同语言对数组的实现及处理也不尽相同。 Java 语言中提供的数组是用来存储固定大小的同类型元素。 你可以声明一个数组变量&#xff0c;如 numbers[100] 来代替直接声明 100 个独立变量 number0&#xff0…

数据结构和算法:复杂度分析

算法效率评估 时间效率&#xff1a;算法运行速度的快慢。 空间效率&#xff1a;算法占用内存空间的大小。 效率评估方法主要分为两种&#xff1a;实际测试、理论估算 实际测试问题&#xff1a; 1.难以排除测试环境的干扰因素。 硬件配置会影响算法的性能。需要在各种机器上进…

第五十六回 徐宁教使钩镰枪 宋江大破连环马-飞桨图像分类套件PaddleClas初探

宋江等人学会了钩镰枪&#xff0c;大胜呼延灼。呼延灼损失了很多人马&#xff0c;不敢回京&#xff0c;一个人去青州找慕容知府。一天在路上住店&#xff0c;马被桃花山的人偷走了&#xff0c;于是到了青州&#xff0c;带领官兵去打莲花山。 莲花山的周通打不过呼延灼&#xf…

vivado 使用Design Runs窗口、

使用Design Runs窗口 “设计运行”窗口显示在项目中创建的所有合成和实现运行。它包括用于配置、管理和启动运行的命令。 打开Design Run窗口 选择窗口 →  Design Runs打开“Design Runs”窗口。 设计运行窗口功能 •每个实现运行都缩进显示在其子级的合成运行下面。 …

[Java、Android面试]_01_多线程: 重要参数、状态、优雅停止线程等

本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料&#xff0c;感兴趣的朋友可收藏关注&#xff0c; 现分享如下&#xff1a; 文章目录 1. 线程池重要参数2. 线程池状态3. 优雅停止线程4. 线…

【Qt学习笔记】(二)--第一个程序“Hello World”(学习Qt中程序的运行、发布、编译过程)

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。    因为我个人对Qt也是有一些需求&#xff0c;所以开设本专栏进行学习&#xff0c;希望大家可以一起学习&#xff0c;共同进步。   这篇博客将从一个 He…

HTML 学习笔记(十一)表单

一、分块 1.单行文本框控件–文本框和密码框 文本框控件通过单标签input实现&#xff0c;其具有必要属性type来控制输入控件的类型(默认为text即文本信息)&#xff0c;密码框的type为password(口令)。   表单的动作属性定义了目的文件的文件名。由动作属性定义的这个文件通常…

Qt QDateTime类使用

一.Qt datetime 介绍 Qt中的QDateTime类是用于处理日期和时间的组合的类&#xff0c;它提供了丰富的功能来操作和格式化日期时间数据。以下是其主要特点和用法&#xff1a; 构造函数&#xff1a;QDateTime可以通过组合QDate&#xff08;日期&#xff09;和QTime&#xff08;时…

C++感受2-逐字逐句,深入理解C++最小例程

以 “Hello World” 例程为载体、线索&#xff0c;在完成 “间接名字空间限定” 写法转换到“直接名字空间限定”的过程&#xff0c;同时掌握函数、主函数、函数调用、级联操作、声明、类型、int、字符串类型、头文件包含、行为数据、流输出操作符、标准输出流对象、标准库名字…

LeetCode.2129. 将标题首字母大写

&#x1f354;题目 2129. 将标题首字母大写 &#x1f35f;分析 这道题目描述的很清晰&#xff0c;我们只需要将给定的字符串按照空格划分成字符串数组 str&#xff0c;然后判断 str[i] 的长度如果 <2 &#xff0c;则将 str[i] 转为小写&#xff0c;如果 str[i] 的长度 &g…

Python批量提取Word文档表格数据

在大数据处理与信息抽取领域中&#xff0c;Word文档是各类机构和个人普遍采用的一种信息存储格式&#xff0c;其中包含了大量的结构化和半结构化数据&#xff0c;如各类报告、调查问卷结果、项目计划等。这些文档中的表格往往承载了关键的数据信息&#xff0c;如统计数据、项目…

CSS 用 flex 布局绘制骰子

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.box {height: 100px;width: 100px;border: 2px solid grey;border-radius: 10px;display: flex;justify-content: center; // 水平居中/* alig…

new-easy(pwn)

1.进行查壳 栈保护&#xff0c;三个保护都开了 NX保护 NX保护在Windows中也被成为称为DEP&#xff0c;是通过现代操作系统的内存单元&#xff08;Memory Protect Unit &#xff0c;MPU&#xff09;机制对程序内存页的粒度进行权限设置&#xff0c;其基本规则为可写权限与可执…

简述类与对象

一、两者关系 类是Java语言中最重要的数据类型&#xff0c;用于创建具体实例&#xff08;对象&#xff09; 抽象出一类事物共有的属性和行为&#xff0c;即数据以及数据上的操作 类是对现实事物的模拟&#xff0c;包含属性&#xff08;成员变量&#xff09;和行为&#xff0…

python读取大型csv文件,降低内存占用,提高程序处理速度

文章目录 简介读取前多少行读取属性列逐块读取整个文件总结参考资料 简介 遇到大型的csv文件时&#xff0c;pandas会把该文件全部加载进内存&#xff0c;从而导致程序运行速度变慢。 本文提供了批量读取csv文件、读取属性列的方法&#xff0c;减轻内存占用情况。 import pand…

2024.3.12 C++

1.思维导图 2.自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height),定义公有成员函数: 初始化函数:void init(int w, int h)更改宽度的函数:set_w(int w)更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #include <iostream…