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

news2024/7/7 14:48:01

关系数据语言可以分为三类: 关系代数、关系演算和介于关系代数与关系演算之间的语言 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.coloradmin.cn/o/1359972.html

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

相关文章

Mac上安装 Node.js 的版本管理工具 n,以及 n 使用,的使用

安装 最近刚更换 Mac 本进行项目的开发&#xff0c;刚上手 Mac 本还不是很熟练&#xff0c;需要安装 Node.js 的包管理工具 在 Windows 上我是实用的 nvm 来管理的 Node 版本&#xff0c;但是我尝试下载 Nvm &#xff0c;发现下载安装后的 Nvm 无法使用&#xff0c;提示 “Th…

关于苹果iOS 16:揭开伪装成飞机模式的隐形蜂窝接入漏洞的动态情报

一、基本内容 在日常生活中&#xff0c;网络威胁不断演变&#xff0c;给个人和组织带来了一系列重大挑战。网络犯罪分子使用的一种最常见的、最具破坏性的方法之一就是网络钓鱼。这种攻击方式通过电子邮件、短信或其他通讯渠道冒充可信实体&#xff0c;诱使个人泄露敏感信息&am…

AI到底是啥?

什么是AI? AI&#xff0c;即人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;是一门研究如何让机器模拟人类智能的学科。它涉及到构建可以感知、推理、学习和决策的智能系统&#xff0c;以解决复杂问题和实现人类类似的任务。 AI的技术包括机器学习、自…

Nginx 开启目录浏览功能

目录 1.没开启前的页面效果 2.开启目录浏览 1.没开启前的页面效果 这是我的一个网站页面&#xff0c;没配置目录浏览功能前的效果 2.开启目录浏览 来到 server 配置文件下 /etc/nginx/conf.d, 然后编辑配置文件&#xff0c;保存之后查看语法是否正确 autoindex on; # 开启目…

MySQL数据库的CURD、常见函数及UNION和UNION ALL

一、概述 MySQL是一种流行的关系型数据库管理系统&#xff0c;广泛应用于各种应用场景。在MySQL中&#xff0c;CURD操作是指创建&#xff08;Create&#xff09;、读取&#xff08;Read&#xff09;、更新&#xff08;Update&#xff09;和删除&#xff08;Delete&#xff09;…

TikTok需要的原生IP是什么?海外独享原生IP地址如何获取?

相信很多做跨境店铺或者TikTok直播的小伙伴都听说过”原生IP”,网络上关于它的判定方法也五花八门&#xff0c;今天小编以自身跨境经验来为大家介绍原生IP是什么?有什么好处&#xff1f;如何获取&#xff0c;感兴趣请继续看下去&#xff01; 一、什么是原生IP/非原生IP? 原生…

JAVA学习专栏

JAVA专栏 Java核心技术 Java核心技术 Java练手算法 Java练手算法 Java数据结构和算法 Java数据结构和算法 Java设计模式 Java设计模式 Java并发编程 Java并发编程 MySQL数据库 MySQL数据库 Java项目管理Maven Java项目管理Maven 项目管理工具gradle 项目管理工具gradle…

Python如何求解最长公共子序列

Python-求解两个字符串的最长公共子序列 一、问题描述 给定两个字符串&#xff0c;求解这两个字符串的最长公共子序列&#xff08;Longest Common Sequence&#xff09;。比如字符串1&#xff1a;BDCABA&#xff1b;字符串2&#xff1a;ABCBDAB。则这两个字符串的最长公共子序…

[电子榨菜]状态管理redux,以及react-redux

0.写在前面 很遗憾&#xff0c;最终还是没能入围2023年的博客评选。 不过不管怎么说&#xff0c;今年需要开个好头。 迫于成本压力吧&#xff0c;最终还是没能顺利离开这里。。。。。。 其实白天已经能放的下啦&#xff0c;我给自己买了喜欢的玩具&#xff0c;去了喜欢的漫…

Typescript 中的namespace

命名空间&#xff1a; 类似 vuex 的 namespace 相当于一个容器。 namespace 是一种将相关代码组织在一起的方式&#xff0c;中文译为“命名空间”。 它出现在 ES 模块诞生之前&#xff0c;作为 TypeScript 自己的模块格式而发明的。但是&#xff0c;自从有了 ES 模块&#x…

龙蜥操作系统上玩转铜锁密码库

编者按&#xff1a;龙蜥操作系统 Anolis OS 支持多计算架构&#xff0c;也面向云端场景优化&#xff0c;兼容 CentOS 软件生态&#xff0c;旨在为广大开发者和运维人员提供稳定、高性能、安全、可靠、开源的操作系统服务。本文为龙蜥社区理事单位蚂蚁集团技术专家张成龙&#x…

初识Winform

什么是winform&#xff1f; WinForms&#xff08;Windows Forms&#xff09;是Microsoft .NET框架中的一个用户界面&#xff08;UI&#xff09;技术&#xff0c;用于创建Windows应用程序。它提供了一组用于构建图形用户界面的类和控件&#xff0c;以及与用户交互的事件模型。 …

HackTheBox - Medium - Linux - Awkward

Awkward Awkward 是一款中等难度的机器&#xff0c;它突出显示了不会导致 RCE 的代码注入漏洞&#xff0c;而是 SSRF、LFI 和任意文件写入/追加漏洞。此外&#xff0c;该框还涉及通过不良的密码做法&#xff08;例如密码重用&#xff09;以及以纯文本形式存储密码来绕过身份验…

CEC2017(Python):七种算法(RFO、DBO、HHO、SSA、DE、GWO、OOA)求解CEC2017

一、7种算法简介 1、红狐优化算法RFO 2、蜣螂优化算法DBO 3、哈里斯鹰优化算法HHO 4、麻雀搜索算法SSA 5、差分进化算法DE 6、灰狼优化算法GWO 7、鱼鹰优化算法OOA 二、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., &…

聚观早报 |小米汽车SU7官图发布;优酷上线“AI搜片”功能

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 12月29日消息 小米汽车SU7官图发布 优酷上线“AI搜片”功能 小米汽车智能驾驶技术公布 百度投资AIGC公司必优科技…

安科瑞新能源汽车车充电桩有序充电——安科瑞 顾烊宇

要&#xff1a;随着当前经济的不断发展&#xff0c;国家的科技也有了飞速的进步&#xff0c;传统的燃油汽车已经不能适应当前社会的发展&#xff0c;不仅对能源造成巨大的消耗&#xff0c;还对环境造成了污染&#xff0c;当前一种新型的交通运输工具正在占领汽车市场。新能源汽…

OEE如何为制造企业实施ISO50001提供支持

ISO50001是一项旨在帮助企业建立和实施能源管理体系的国际标准&#xff0c;以提高能源效率、降低能源消耗和减少环境影响。而设备OEE&#xff08;设备综合效率&#xff09;作为一个关键的生产效率指标&#xff0c;可以为企业实施ISO50001提供重要的支持。本文将介绍ISO50001能源…

手机/平板实现电脑第三屏-记录极简

软件&#xff1a; 手机 平板 : moonlight 电脑&#xff1a; 1 KtzeAbyss/Easy-Virtual-Display 2 Parsec Virtual Display Driver https://builds.parsec.app/vdd/parsec-vdd-0.38.0.0.exe 3 LizardByte/Sunshine: Self-hosted game stream host for Moonlight. (gith…

java练习题之List(ArrayList)集合练习

List集合 习题&#xff1a; 1&#xff1a;完成以下填空&#xff1a; List 接口的特点是元素 有序 &#xff08;有|无&#xff09;顺序&#xff0c; 可重复 &#xff08;可以|不可以&#xff09;重复&#xff1b; 2&#xff1a;(List)关于List 集合描述正确的是&#xff08;…

2022年第十三届中国数据库技术大会(DTCC2022)-核心PPT资料下载

一、峰会简介 本届大会以“数据智能 价值创新”为主题&#xff0c;设置2大主会场&#xff0c;20技术专场&#xff0c;邀请超百位行业专家&#xff0c;重点围绕时序数据库、图数据技术、实时数仓技术与应用实践、云原生数据库、大数据平台与数据安全等内容展开分享和探讨&#…