【数据库原理】(8)关系数据库的关系代数

关系数据语言可以分为三类: 关系代数、关系演算和介于关系代数与关系演算之间的语言 SQL。
下面专门讲述用对关系进行运算来表达查询要求的关系代数。关系代数的运算对象是关系,运算结果也是关系。关系代数用到的运算符包括四类:集合运算符、专门的关系运算符、算术比较运算符和逻辑运算符,其中比较运算符和逻辑运算符是用来辅助运算的专门关系运算符。
在这里插入图片描述

传统的集合运算包括并、交、差和广义笛卡儿积等。集合运算把关系看做元组的集合,从水平(行)方向进行运算,广义笛卡儿积把两个关系的元组以所有可能的方式组成对。专门的关系运算包括选择、投影、连接和除等,既从行又从列的方向进行运算。“选择”会删除某些行;“投影”会删除某些列; 各种连接运算将两个关系的元组中有选择地组成对,构成一个新关系。

一. 传统的的集合运算

传统的集合运算包括并、交、差、广义笛卡儿积四种运算。

设关系 R和S 是相互兼容的,R和S 必须同类型(属性集相同、次序相同,但属性名可以不同)

1.并(Union)

  • 数学表示 R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R∪S =\{t|t∈R\vee t ∈S\} RS={ttRtS}
  • 要求:关系 R 和 S 必须是类型相兼容的,即具有相同数量和类型的属性。
  • 结果:产生一个包含 R 和 S 中所有唯一元组的新关系。
  • 注意:相同元组在并集中只出现一次;

在这里插入图片描述

2.交 (Intersection)

  • 数学表示 R ∩ S = { t ∣ t ∈ R ∨ t ∈ S } R∩S =\{t|t∈R\vee t∈S\} RS={ttRtS}
  • 要求:关系 R 和 S 必须是类型相兼容的。
  • 结果:产生一个新关系,包含同时属于 R 和 S 的元组。
  • 注意:相同元组在交集中只出现一次;

3.差 (Difference)

  • 数学表示 R − S = { t ∣ t ∈ R ∨ t ∉ R } R-S =\{t|t∈R\vee t ∉ R\} RS={ttRt/R}
  • 要求:关系 R 和 S 必须是类型相兼容的。
  • 结果:产生一个新关系,包含属于 R 但不属于 S 的元组。

两关系的交集可以通过差运算导出: R∩S= R-(R-S)

4.广义笛卡儿积

  • 数学表示 R ∗ S = { t r t s ∣ t r ∈ R ∨ t s ∈ S } R*S=\{t_rt_s|t_r∈R\vee t_s∈S\} RS={trtstrRtsS}
  • 结果:产生一个新关系,其每个元组由 R 的一个元组和 S 的一个元组组成,元组总数为 R 和 S 元组数的乘积。

在这里插入图片描述

注意事项

  • 并集与交集:在实际应用中,由于关系数据库中的关系通常定义为无序集合,因此并集和交集操作会自动去除重复的元组。
  • 广义笛卡儿积:这是一个强大的操作,它允许您组合来自两个关系的数据,即使它们之间没有直接的关联。这个操作是许多更复杂操作的基础,例如连接操作。

二.专门的关系运算

术语解释

  1. 元组(Tuple): 在关系模型中,元组是表中的一行。
  2. 属性(Attribute): 元组中的一个分量,类似于表中的一列。
  3. 属性列/属性组(Attribute List/Group): 一个或多个属性构成的集合。
  4. 连接(Concatenation): 把两个元组拼接在一起,形成一个更长的元组。
  5. 象集(Image Set): 对于关系 R 中的特定值 x,其象集包含所有在 R 中 X 值为 x 的 Z 值。

示例:R(X, Z) 关系和 X = {S} 为例,我们有:

  • 001 的象集 Z 001 Z_{001} Z001: 包含了 S = 001 时,关系 R 中 Z 的所有值。即,所有 R 中 S 值为 001 的元组在 Z 上的值集合。
  • 002 的象集 Z 002 Z_{002} Z002: 只包含一个值,因为在 R 中只有一个元组的 S 值为 002。
  • 003 的象集 Z 003 Z_{003} Z003: 包含了两个值,对应于 S = 003 的两个不同的 Z 值。

在这里插入图片描述

1.选择 (Selection)

选择运算是关系代数中非常重要的一项运算,它对应于 SQL 中的 WHERE 子句。按照指定的条件筛选出满足条件的元组(行)。

定义
  • 符号:σ
  • 表达式: σ F ​ ( R ) σ_F​(R) σF(R)
  • 逻辑:从关系 R 中选择使得逻辑表达式 F 为真的所有元组t。

逻辑表达式 F

  • 表达式 F 可以是任何能够对关系中的元组进行评估的逻辑条件,例如 A 1 ​ = 5 、 A 2 > 10 A_1​=5、A_2>10 A1=5A2>10 或者 A 3 ​ = " J o h n " A_3​="John" A3="John"
  • 这些条件可以使用逻辑运算符(AND, OR, NOT)组合起来,以形成更复杂的查询条件。

示例

如果我们有一个学生表 Students(ID,Name,Age,Major),并且我们想选择所有主修计算机科学的学生,我们可以使用以下选择表达式:

σ M a j o r = " C o m p u t e r S c i e n c e " ​ ( S t u d e n t s ) σ_{Major}="Computer Science"​(Students) σMajor="ComputerScience"​(Students)

这将返回一个新的关系,其中包含了所有满足条件 Major="Computer Science"Major=“Computer Science” 的元组。

SQL 对应

在 SQL 中,同样的操作会用下面的查询来完成:

SELECT * FROM Students WHERE Major = 'Computer Science';

注意

  • 选择运算是从关系的水平方向进行的,即它过滤掉不满足条件的行。
  • 选择运算的结果仍然是一个关系,这意味着结果可以作为另一个运算的输入。
  • 选择运算不会改变元组的属性,它只是简单地包含或排除整个元组。

2.投影 (Projection)

投影运算是关系代数中的另一种基本操作,它对应于 SQL 中的 SELECT 语句(特定列的选择)。投影用于提取关系中的特定列,并创建一个新的关系,该关系仅包含指定的列。

定义

  • 符号:π
  • 表达式: π A ​ ( R ) π_A​(R) πA(R)
  • 逻辑:从关系 R 中提取属性子集 A,并创建一个新关系,其中包含原关系的指定列。

属性子集 A

  • A 是关系 R 中的属性集合,可以是任意数量的属性。
  • 投影操作将从原始关系中选择这些属性,并在新关系中仅包含这些列。

示例

假设我们有一个学生表 Students(ID,Name,Age,Major),并且我们只对学生的名字和专业感兴趣,我们可以使用以下投影表达式:

π N a m e , M a j o r ​ ( S t u d e n t s ) π_{Name, Major}​(Students) πName,Major(Students)

这将返回一个新的关系,其中仅包含两列:Name 和 Major。

SQL 对应

在 SQL 中,同样的操作会用下面的查询来完成:

SELECT Name, Major FROM Students;

注意

  • 投影运算是从关系的垂直方向进行的,即它只选择所需的列,而忽略其他列。
  • 在执行投影运算时,可能会出现重复的行。在关系模型中,关系被视为一个集合,因此所有的重复行都会被去除,以确保结果中每个元组都是唯一的。
  • 当需要对关系进行筛选和属性选择时,通常首先应用选择运算以减少数据集的大小,然后应用投影运算以提取所需的列。

在这里插入图片描述

3.连接 (Join)

定义
  • 表示法 R ⋈ A θ B ​ S R⋈_{AθB}​S RAθBS
  • 逻辑:从关系 R 和 S 的广义笛卡儿积中选取满足 AθB 条件的元组对。
参数
  • A 和 B:分别是关系 R 和 S 上的属性组。
  • θ:比较运算符,例如 = 、 ≠ 、 < 、 > =、≠、<、> ==<> 等。
类型
  1. 等值连接 (Equi-Join)

    • 定义:当 θ 为等于(=)时的连接称为等值连接。
    • 表示法: R ⋈ A = B ​ S R⋈_{A=B}​S RA=BS
    • 特点:只包含在指定属性上具有相等值的元组对。
  2. 自然连接 (Natural Join)

    • 定义:一种特殊的等值连接,它自动找出两个关系中名称相同的所有属性,并基于这些属性的相等性进行连接。
    • 表示法:R⋈S
    • 特点:结果中不会有重复的属性列,仅包含那些在两个关系中共有的属性的元组。

示例

假设有两个关系 R 和 S,其中 R 中有属性 A 和 S 中有属性 B,要在 A 和 B 上进行等值连接,你会写:

R ⋈ A = B ​ S R⋈_{A=B}​S RA=BS

这将返回一个新的关系,其中包括了 R 和 S 的所有元组对,这些元组对在 A 和 B 上的值相等。

SQL 对应

在 SQL 中,等值连接可以使用 INNER JOIN 关键字来实现,而自然连接通常需要使用 JOIN 关键字加上适当的 ON 子句来指定连接条件。

外连接 (Outer Join)

外连接允许在连接结果中包含即使在一个关系中没有匹配元组也会出现的行。外连接有以下三种类型:

  1. 左外连接 (Left Outer Join)

    • 包含左关系(R)的所有元组,如果在右关系(S)中没有匹配,则在右侧填充 NULL
  2. 右外连接 (Right Outer Join)

    • 包含右关系(S)的所有元组,如果在左关系(R)中没有匹配,则在左侧填充 NULL
  3. 全外连接 (Full Outer Join)

    • 包含左关系和右关系的所有元组,无匹配的地方填充 NULL

在这里插入图片描述

4.除运算 (Division)

除运算(Division)在关系代数中是一种稍微复杂一点的运算,它用于处理如“找到所有…”这类的查询。除运算找到所有在一个关系中的元组,它们与另一个关系中所有元组相关联。
在这里插入图片描述

定义

除运算是一种同时考虑行和列的运算。给定两个关系 R(X, Y) 和 S(Y, Z),其中 X、Y、Z 为属性组,除运算的结果是一个新关系,该关系包含了 R 中那些与 S 中 Y 属性上所有值都有关联的 X 属性上的值。

数学表示

给定 R(X, Y) 和 S(Y, Z),除运算定义为:

R ÷ S = { t r ​ [ X ] ∣ t r ​ ∈ R ∧ π Y ​ ( S ) ⊆ Y t r ​ [ X ] ​ } R÷S=\{t_r​[X]∣t_r​∈R∧π_Y​(S)⊆Y_{tr​[X]}​\} R÷S={tr[X]trRπY(S)Ytr[X]}

其中 Y t r ​ [ X ] Y_{t_r​[X]} Ytr[X]​ 是 R 中 X 值为 t r ​ [ X ] t_r​[X] tr[X] 的象集,即 R 中所有 X 属性值为 t r ​ [ X ] t_r​[X] tr[X] 的元组在 Y 上的值的集合。

示例解释

在您的例子中,我们有关系 R(AB, CD) 和 S(CD),并且我们想找到所有与 S 中所有 CD 值都有关联的 AB 值。

  • 关系 S 在 CD 上的投影是所有可能的 CD 组合,即 {(c,d),(e,f)}。
  • 关系 R 中 AB 值为 (a, b) 的像集是 {(c,d),(e,f),(h,k)},它包含了 S 的所有 CD 值,因此 (a, b) 出现在结果中。
  • 关系 R 中 AB 值为 (c, k) 的像集也包含了 S 的所有 CD 值,所以 (c, k) 也出现在结果中。

因此,R/S 的结果是关系中包含 (a, b) 和 (c, k) 的新关系。

注意
  • 除运算通常用于处理查询,这些查询需要找到“对于所有…”这类的情况。
  • SQL 没有直接支持除运算,但可以使用组合查询来实现相同的效果。

在这里插入图片描述

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

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

相关文章

若依项目(ruoy-vue)多模块依赖情况简要分析

主pom文件关键点分析 properties标签声明变量信息&#xff1a;版本号、编码类型、java版本spring-boot依赖形式&#xff1a;spring-boot-dependencies、pom、importdependencies中添加本项目内部模块&#xff0c;同时在modules中声明模块packaging打包选择pom设置打包maven-co…

VMware Workstation虚拟机CentOS 7.9 配置固定ip的步骤

VMware Workstation虚拟机CentOS7.9配置固定ip的步骤 编辑虚拟机 打开VMware Workstation。 选择要配置的虚拟机&#xff0c;但不要启动它。 点击“编辑虚拟机设置”&#xff08;Edit virtual machine settings&#xff09;。 选择“网络适配器”&#xff08;Network Adapter&…

win11电脑图形卡不支持或已禁用硬件加速怎么解决,N卡GPU看不到cuda进程怎么办

摘要 亲&#xff0c;很高兴为你解答。win11电脑图形卡不支持或已禁用硬件加速解决方法&#xff1a;1、点击任务栏上的开始图标&#xff0c;在打开的菜单中&#xff0c;点击设置&#xff0c;&#xff08;快捷键WINX&#xff0c;点击设置&#xff09;。2、Windows系统 设置窗口&a…

找不到vcruntime140.dll怎么处理?6个修复教程分享

本文将详细介绍vcruntime140.dll文件的相关内容&#xff0c;并提供6个不同的修复教程&#xff0c;帮助大家解决这一问题。 一、vcruntime140.dll是什么文件&#xff1f; vcruntime140.dll是Visual C Redistributable Packages的一部分&#xff0c;它是Microsoft Visual Studi…

C# 2中的一些小特性

一、局部类型 在C#当中有这样一个关键字partial 用来声明类&#xff0c;结构&#xff0c;接口分为多个部分来声明。使用场景可以一部分类中写实例方法&#xff0c;一部分写属性&#xff0c;我在实际工作测试中就是将属性与实际方法是分开的。相互之间的成员互相通用。 举个例子…

秋招复习之数据结构

目录 前言 1 数据结构分类 2 基本数据类型 3 数字编码 4 字符编码 总结 前言 秋招复习之数据结构&#xff0c;数据结构分类、基本数据类型、字符编码、数字编码等基础知识。 1 数据结构分类 数据结构分为逻辑结构和物理结构。 逻辑结构分为线性数据结构&#xff08;数组链表…

卷麻了,00后测试用例写的比我还好,简直无地自容...........

经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对编写测试用例感到困扰&#xff1f;例如&#xff1a; 如何编写测试用例&#xff1f; 作为一个测试新人&#xff0c;刚开始接触测试&#xff0c;对于怎么写测试用例很是头疼&#xff0c;无法…

私域和微商有什么区别?

私域和微商到底有什么区别呢&#xff1f;其实这两个东西有着本质性区别。 私域&#xff1a; 通过原有商业或者新媒体方式获取粉丝或顾客&#xff0c;然后用微信等社交工具&#xff0c;多方位展现&#xff0c;人格专业。 最终目标是让粉丝或顾客成为品牌或IP的朋友&#xff0…

Ajax基础入门_Ajax概述,同步与异步,Axios的使用,JSON数据及FastJSON的使用

Ajax 文章目录 Ajax1 概述2 作用3 同步和异步3.1 同步3.2 异步 4 代码编写4.1 服务端4.2 客户端 5 Axios5.1 使用5.2 代码5.2.1 前端5.2.2 后端 5.3 请求方法别名 6 JSON6.1 概述6.2 JSON 基础语法6.2.1 定义格式6.2.2 js 对象与JSON的转换 6.3 发送异步请求携带参数6.4 JSON串…

机器学习(四) -- 模型评估(2)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 机器学习&#xff08;四&#xff09; -- 模型评估…

数据库——SQL DDLDML使用

1.实验内容及原理 1. 在 Windows 系统中安装 VMWare 虚拟机&#xff0c;在 VMWare 中安装 Ubuntu 系统,并在 Ubuntu 中搭建 LAMP 实验环境。 2. 使用 MySQL 进行一些基本操作&#xff1a; &#xff08;1&#xff09;登录 MySQL&#xff0c;在 MySQL 中创建用户&#xff0c;…

云原生架构未来发展趋势,探索容器技术未来的发展趋势

云原生架构未来发展趋势&#xff0c;探索容器技术未来的发展趋势 云原生架构未来发展趋势容器技术发展趋势无处不在的计算催生新一代容器实现深入分布式云&#xff08;从多云/混合云&#xff0c;到分布式云&#xff09;云原生操作系统Kubernetes已经成为云时代的操作系统从无状…

直流有刷电机的简单高性能控制方法

提出问题 在STM32——直流电机PI调速一文中推导了直流有刷电机的数学模型&#xff0c;在不考虑电流环的情况下&#xff0c;可做降阶处理&#xff0c;视同一个一阶系统&#xff0c;通过简单的 P I PI PI控制使得电机有着不错的响应&#xff0c;但仍然存在两个问题&#xff0c;一…

网站迁移和SEO:损害排名的常见错误

正在规划站点迁移&#xff1f; 迁移是更困难的 - 通常是可怕的 - SEO任务之一。 为了让它发挥作用&#xff0c;你需要避免常见的陷阱&#xff0c;这些陷阱可能会影响你的知名度&#xff0c;并导致流量和收入的损失。 8 月 11 日&#xff0c;我主持了一场赞助的搜索引擎杂志网…

PD SINK协议芯片系列产品介绍对比-ECP5701、FS312A、CH221K、HUSB238、AS225KL

目录 一、 ECP5701 二、 FS312A 三、 CH221K 四、 HUSB238 五、 AS225KL 在如今快节奏生活不断蔓延的背景下&#xff0c;人们对各种事情的处理也渐渐地开始要求在保证质量的情况下&#xff0c;不断加快。手机快充就是一个典型的例子&#xff0c;从开始的18W&#xff0c;30…

linux usb 驱动介绍

通用串行总线(USB)是一个在主机和许多外设之间的连接. 最初它被创建来替代许多慢速和不同的总线- 并口, 串口, 和键盘连接--有一个单个的所有设备都可以连接的总线类型. [45] USB 已经成长超出了这些 慢速连接并且现在支持几乎每种可以连接到 PC 的设备. USB 规范的最新版本增加…

并行算法举例

谷歌的三大马车中的两辆分别是MapReduce GFS 这些我们在后边都会学到。 补充shuffle的作用 将map中的内容&#xff0c;具备相同内容的key被放到一组 问题1 矩阵乘法 第一轮j相同放在一起。 第二轮ik相同的放在一起。 问题2 求和问题 问题3 不重复元素

【机器学习基础】DBSCAN

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;相对完整的机器学习基础教学&#xff01; ⭐特别提醒&#xff1a;针对机器学习&#xff0c;特别开始专栏&#xff1a;机器学习python实战…

C++_string类

目录 一、string的模拟实现 1、初始化字符串 2、拷贝构造 3、赋值重载 4、迭代器 5、比较字符串 6、尾插字符、字符串 7、resize 8、中间插入数据、删除数据 8.1 插入数据 8.2 删除数据 9、查找数据 10、打印对象&#xff08;流插入、流提取&#xff09; 结语&a…

centos7部署minio单机版

一、目标 在centos7上部署minio单机版 二、centos7部署minio 1、下载minio mkdir /usr/local/minio cd /usr/local/minio wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod x minio 2、新建minio存储数据的目录 mkdir -p /data/minio/data3、新建…