数据库系统概论——关系代数详解

news2024/12/24 2:09:39

文章目录

  • 1、关系代数概述
      • 1.1 传统的集合运算
      • 1.2 专门的关系运算
        • 1.2.1 选择运算
        • 1.2.2 投影(Projection)
        • 1.2.3 连接(Join)
        • 1.2.4 两类常用连接运算
        • 1.2.5 除(Division)

1、关系代数概述

关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是利用对关系的运算来表达查询的。

任何运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。

关系代数的运算对象是关系,运算结果亦为关系。

运算符:

  • 集合运算符
    • 将关系看成元组的集合
    • 从关系的“水平”方向即行的角度来进行运算
  • 专门的关系运算符
    • 不仅涉及而且涉及
  • 算术比较符
    • 辅助专门的关系运算符进行操作
  • 逻辑运算符
    • 辅助专门的关系运算符进行操作

常见的关系运算符如下:
在这里插入图片描述

1.1 传统的集合运算

设关系 R R R和关系 S S S是相容的, t t t代表元组变量,现将各种运算分别介绍如下:

(1)并(Union)

  • 关系 R R R与关系 S S S的并记作: R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R∪S=\{t|t∈R∨t∈S \} RS={ttRtS}
  • 结果关系是由属于 R R R或属于 S S S的元组组成,且结果仍为 n n n目关系,但结果关系要消除重复元组。

举例:

R R R S S S

  • 具有相同的目 n n n(即两个关系都有n个属性)
  • 相应的属性取自同一个域

R ∪ S R∪S RS

  • 仍为 n n n目关系,由属于 R R R或属于 S S S的元组组成
    • R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R∪S=\{t|t∈R∨t∈S \} RS={ttRtS}

具体如下图所示:
在这里插入图片描述

(2)交( Intersection)

  • 关系 R R R与关系 S S S的交记作: R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R∩S=\{t|t∈R∧t∈S \} RS={ttRtS}
  • 结果关系由既属于 R R R又属于 S S S的元组组成,且仍为 n n n目关系。

举例:

R R R S S S

  • 具有相同的目 n n n
  • 相应的属性取自同一个域

R ∩ S R∩S RS

  • 仍为 n n n目关系,由既属于 R R R又属于 S S S的元组组成
    • R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R∩S=\{t|t∈R∧t∈S \} RS={ttRtS}

具体如下图所示:
在这里插入图片描述

(3)差(Difference)

  • 关系R与关系S的差记作: R − S = { t ∣ t ∈ R ∧ t ∉ S } R-S=\{t|t∈R ∧t \notin S\} RS={ttRt/S}
  • R R R S S S的差,结果关系由属于 R R R而不属于 S S S的所有元组组成,且仍为 n n n目关系,即在关系 R R R中减去 R R R S S S的相同元组。

举例:

R R R S S S

  • 具有相同的目 n n n
  • 相应的属性取自同一个域

R − S R - S RS

  • 仍为 n n n目关系,由属于 R R R而不属于 S S S的所有元组组成
    • R − S = { t ∣ t ∈ R ∧ t ∉ S } R-S=\{t|t∈R ∧t \notin S\} RS={ttRt/S}

在这里插入图片描述

(4)广义笛卡尔积(Extended Cartesian Product)

  • 两个分别为 n n n目和 m m m目的关系, R R R S S S的广义笛卡尔积是一个 ( n + m ) (n+m) (n+m)列的元组的集合。
  • 元组的前 n n n列是关系 R R R的一个元组,后 m m m列是关系 S S S的一个元组。若 R R R k 1 k_1 k1个元组, S S S k 2 k_2 k2个元组,则关系 R R R和关系 S S S的广义笛卡尔积有 k 1 × k 2 k_1×k_2 k1×k2个元组。
  • 记作: R × S = { ( a 1 , a 2 , … a m , b 1 , b 2 , … b n ) ∣ ( a 1 , a 2 , … a m ) ∈ R ∧ ( b 1 , b 2 , … b n ) ∈ S } 。 R×S=\{(a_1,a_2,…a_m,b_1,b_2,…b_n)| (a_1,a_2,…a_m) ∈R ∧ (b_1,b_2,…b_n) ∈ S\}。 R×S={(a1,a2,am,b1,b2,bn)(a1,a2,am)R(b1,b2,bn)S}

严格地讲应该是广义的笛卡尔积

  • R R R: n n n目关系, k 1 k_1 k1个元组
  • S S S: m m m目关系, k 2 k_2 k2个元组

R × S R×S R×S

  • 列: m + n m+n m+n列元组的集合

    • 元组的前 n n n列是关系 R R R的一个元组
    • m m m列是关系 S S S的一个元组
  • 行: k 1 × k 2 k_1×k_2 k1×k2个元组
    在这里插入图片描述
    具体如下图所示:
    在这里插入图片描述

1.2 专门的关系运算

在讲解之前,我们先引入几个记号,这样有助于下面的理解,确实关系代数后半部分有点难理解。
(1) R , t ∈ R , t [ A i ] R,t\in R,t[A_i] R,tR,t[Ai]
设关系模式为 R ( A 1 , A 2 , … , A n ) R(A_1,A_2,…,A_n) R(A1A2An),它的一个关系设为 R R R t ∈ R t\in R tR表示 t t t R R R的一个元组, t [ A i ] t[A_i] t[Ai]则表示元组t中相应于属性 A i A_i Ai的一个分量。

(2) t r t s ⏞ \overbrace{t_rt_s} trts R R R n n n目关系, S S S m m m目关系。
t r ∈ R , t s ∈ S , t r t s ⏞ t_r\in R,t_s\in S, \overbrace{t_r t_s} trRtsStrts 称为元组的连接。 t r t s ⏞ \overbrace{t_r t_s} trts 是一个 n + m n + m n+m列的元组,前 n n n个分量为 R R R中的一个 n n n元组,后 m m m个分量为 S S S中的一个 m m m元组。
(3)象集 Z x Z_x Zx
给定一个关系 R ( X , Z ) R(X,Z) RX,Z X X X Z Z Z为属性组。当 t [ X ] = x t[X]=x t[X]=x时, x x x R R R中的象集(Images Set)为:
Z x = t [ Z ] ∣ t ∈ R , t [ X ] = x Z_x={t[Z]|t \in R,t[X]=x} Zx=t[Z]tRt[X]=x

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

举例如下:
在这里插入图片描述
上面抽象的例子可能并不是特别容易理解,那么我们就拿生活中的实际例子进行解释:

学生-课程-选修关系:
学生关系Student、课程关系Course和选修关系SC

在这里插入图片描述
在上面的关系表中,我们可以把SC表看作一个关系R,它的属性组为学号,课程号以及成绩,即 R ( S n o , C n o , G r a d e ) R(Sno, Cno, Grade) R(Sno,Cno,Grade)。这时我们将SC表与上面那个例子对比可以看出,Sno为200215121的学号在关系R(SC表)中的象集为 S n o 200215121 = { 1 , 2 , 3 } Sno_{200215121}=\{1,2,3\} Sno200215121={123},以此类推,这样就比较容易理解一点。

1.2.1 选择运算

  • 选择又称为限制
  • 选择运算符的含义
    • 关系R上的选择操作是根据某些条件对关系R做水平分割,即从行的角度选择符合条件的元组。
  • 在关系R中选择满足给定条件的诸元组
    • 记作: σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = ‘真’ } σF(R)=\{t|t∈R∧F(t)=‘真’\} σFR={ttRF(t)=}
  • F:选择条件,是一个逻辑表达式,取逻辑值“真”或“假”。
  • 选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算

在这里插入图片描述

F:选择条件,是一个逻辑表达式

  • 基本形式为: X 1 θ Y 1 X_1θY_1 X1θY1
  • θ θ θ:比较运算符 (>, ≥ ,<, ≤ ,=或 < > ) (>,≥,<,≤,=或<>) (>,,<,,=或<>
  • X 1 , Y 1 X_1,Y_1 X1Y1:属性名、常量、简单函数.
  • 属性名也可以用它的序号来代替;

以最上面的学生-课程-选修关系表举例说明更好理解:

[例1] 查询信息系(IS系)全体学生

σ S d e p t = ′ I S ′ ( S t u d e n t ) 或 σ 5 = ′ I S ′ ( S t u d e n t ) σ_{Sdept} = 'IS' (Student) 或 σ_5 ='IS'(Student) σSdept=IS(Student)σ5=IS(Student)

结果:
在这里插入图片描述

[例2] 查询年龄小于20岁的学生
σ S a g e < 20 ( S t u d e n t ) 或 σ 4 < 20 ( S t u d e n t ) σ_{Sage< 20}(Student) 或 σ_{4 < 20}(Student) σSage<20(Student)σ4<20(Student)

结果:
在这里插入图片描述

1.2.2 投影(Projection)

投影运算符的含义:

  • 从R中选择出若干属性列组成新的关系
    • π A ( R ) = t [ A ] ∣ t ∈ R π_A(R) = { t[A] | t \in R } πA(R)=t[A]tR
    • A:R中的属性列

投影操作主要是从列的角度进行运算:
在这里插入图片描述
但投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)

举例说明一下:
[例3] 查询学生的姓名和所在系
即求Student关系上学生姓名和所在系两个属性上的投影

π S n a m e , S d e p t ( S t u d e n t ) 或 π 2 , 5 ( S t u d e n t ) π_{Sname,Sdept}(Student) 或 π_{2,5}(Student) πSnameSdept(Student)π25(Student)

结果:
在这里插入图片描述
[例4] 查询学生关系Student中都有哪些系

π S d e p t ( S t u d e n t ) π_{Sdept}(Student) πSdept(Student)

结果:
在这里插入图片描述
由此可见,使用投影操作可以将关系表中的列单独拿出来组成新的关系表,这样方便我们可以更加清楚的查看自己想要的信息。

1.2.3 连接(Join)

连接也称为 θ θ θ连接

连接运算的含义:
从两个关系的笛卡尔积中选取属性间满足一定条件的元组
在这里插入图片描述
连接运算从 R 和 S R和S RS的广义笛卡尔积 R × S R×S R×S中选取( R R R关系)在 A A A属性组上的值与( S S S关系)在 B B B属性组上值满足比较关系 θ θ θ的元组

举例说明一下:
[例5]关系R和关系S 如下所示:
在这里插入图片描述
在这里插入图片描述

1.2.4 两类常用连接运算

(1)等值连接(equijoin)

  • 什么是等值连接?
    • θ为“=”的连接运算称为等值连接
  • 等值连接的含义
    • 从关系R与S的广义笛卡尔积中选取A、B属性值相等的
      那些元组,即等值连接为:
      在这里插入图片描述
      举例说明:
      在这里插入图片描述
      在这里插入图片描述
      (2)自然连接(Natural join)
  • 自然连接是一种特殊的等值连接
    • 两个关系中进行比较的分量必须是相同的属性组
    • 在结果中把重复的属性列去掉
  • 自然连接的含义
    • R和S具有相同的属性组B

在这里插入图片描述
举例:
在这里插入图片描述
在这里插入图片描述
一般的连接操作是从行的角度进行运算。
在这里插入图片描述
自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。

1.2.5 除(Division)

给定关系 R ( X , Y ) R (X,Y) R(XY) S ( Y , Z ) S (Y,Z) S(YZ),其中 X , Y , Z X,Y,Z XYZ为属性组。 R R R中的 Y Y Y S S S中的 Y Y Y可以有不同的属性名,但必须出自相同的域集。 R R R S S S的除运算得到一个新的关系 P ( X ) P(X) P(X) P P P R R R中满足下列条件的元组在 X X X 属性列上的投影:

元组在 X X X上分量值 x x x的象集 Y x Y_x Yx包含 S S S Y Y Y上投影的集合,记作:
在这里插入图片描述
关于象集的概念我们在前面已经提到了,在此直接举例子说明除:

[例6]设关系 R 、 S R、S RS分别为下图的(a)和(b), R ÷ S R÷S R÷S的结果为图©

在这里插入图片描述

通过上面的结果我们可以发现,关系 R R R中的 B 、 C B、C BC属性组,和关系 S S S中的 B 、 C B、C BC属性组的域都是相同的, R 与 S R与S RS的除运算得到了一个新的关系,我们将它当做 P ( A ) P(A) P(A) P P P R R R中满足上述条件的元组在 A A A属性列中的投影。

分析:
设关系 R , S R,S RS,分别为例6中的(a)和(b), R ÷ S R÷S R÷S的结果为图©,关系 R R R A A A可以取四个值 { a 1 , a 2 , a 3 , a 4 } , \{ a_1,a_2,a_3,a_4\}, {a1a2a3a4}, 其中:

  • a 1 a_1 a1的象集为 { ( b 1 , c 2 ) , ( b 2 , c 1 ),( b 2 , c 3 ) } \{(b_1,c_2),(b_2,c_1),(b_2,c_3)\} {b1c2,b2c1),(b2c3}
  • a 2 a_2 a2的象集为 { ( b 3 , c 7 ) , ( b 2 , C 3 ) } \{(b_3,c_7),(b_2,C_3)\} {b3c7,b2C3}
  • a 3 a_3 a3的象集为 { ( b 4 , c 6 ) } \{ (b_4,c_6) \} {(b4c6)}
  • a 4 a_4 a4的象集为 { ( b 6 , c 6 ) } \{(b_6,c_6)\} {b6c6}

S S S ( B , C ) (B,C) BC上的投影为 { ( b 1 , c 2 ),( b 2 , c 1 ) , ( b 2 , c 3 ) } \{(b_1,c_2),(b_2,c_1),(b_2,c_3)\} {b1c2),(b2c1,b2c3}

显然只有 a 1 a_1 a1的象集包含了 S S S ( B , C ) (B,C) (B,C)属性组上的投影,所以 R ÷ S = { a 1 } R÷S=\{a1\} R÷S={a1}

除操作是同时从行和列角度进行运算
在这里插入图片描述

📢博客主页:https://blog.csdn.net/m0_63007797?spm=1011.2415.3001.5343
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 心无旁骛~ 原创,首发于 CSDN博客🙉
📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

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

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

相关文章

虹科分享 | 虹科智能自动化2022文章精选

虹科智能自动化事业部一直围绕着工业自动化、能源管理与楼宇自动化三大方向&#xff0c;为客户提供最满意的技术服务和最适合的解决方案&#xff0c;并结合客户需求、行业发展动向和产品资讯&#xff0c;虹科智能自动化团队为大家带来了丰富的技术文章和应用案例。温故而知新&a…

【SpringCloud复习巩固】Nacos

Nacos 链接&#xff1a;https://pan.baidu.com/s/1Ct6upj-kpLuVwyNpk_3KMw 提取码&#xff1a;yyac 目录 一.Nacos 1.1认识Nacos 1.2安装Nacos 1.2.1下载安装包 1.2.2解压到任意非中文目录 1.2.3介绍 1.2.4启动 1.2.5访问 1.3服务注册到Nacos 1.3.1在cloud-demo父工程…

APP漏洞挖掘(二)同开发商的多款APP存在通用漏洞

0x01 前言 测某一APP时&#xff0c;根据信息收集测试&#xff0c;发现APP的后台系统存在SQL注入、XSS、弱口令、信息泄漏等漏洞&#xff0c;此APP本身存在逻辑漏洞与SQL注入漏洞&#xff0c;再通过观察酷传搜索的结果发现此APP开发商开发了三十几个APP&#xff0c;猜测可能存在…

Vue笔记01 模板语法,数据代理,事件处理,计算监听属性,绑定样式,列表渲染

基本使用 引入vue 创建vue实例并关联容器 一个Vue实例只应对应一个容器 一个Vue实例可以有多个组件 模板语法 使用Vue实例中数据 root容器中代码被称为vue模板 语法分为插值语法和指令(v-xxx) 插值语法 绑定标签体内容 {{}}中的可以是js表达式&#xff08;特殊的js代码&…

手把手带你调参Yolo v5(一)

来源&#xff1a;投稿 作者&#xff1a;王同学 编辑&#xff1a;学姐 YOLO系列模型在目标检测领域有着十分重要的地位&#xff0c;随着版本不停的迭代&#xff0c;模型的性能在不断地提升&#xff0c;源码提供的功能也越来越多&#xff0c;那么如何使用源码就显得十分的重要&am…

Kylin基本介绍、特点、架构

目录1. Kylin的基本介绍2. Kylin的特点3. Kylin的架构1. Kylin的基本介绍 Kylin是一种MOLAP(Multidimensional OLAP)&#xff0c;基于多维数据集&#xff0c;需要预计算。另一种OLAP是ROLAP(Relational OLAP)&#xff0c;基于关系型数据库&#xff0c;不需要预计算&#xff0c…

单链表的使用方法.数据结构(三)[上]

前言 提示&#xff1a;文本为数据解构(三)单链表&#xff1a; 本文具体讲解单链表的具体使用方法 提示&#xff1a;以下是本篇文 系列文章目录 第一章 数据解构(一) 第二章 顺序表的具体使用方法.数据解构(二) 文章目录 前言 系列文章目录 文章目录 一、单链表视图 二、…

JavaWeb—Tomcat服务器

1 tomcat概述及基本使用 概述 tomcat是apache软件基金会的jakatai项目组的一个核心项目&#xff0c;由apache、sun和其他一些公司及个 人共同开发而成。由于有了sun公司的参与和支持&#xff0c;最新的servlet、jsp规范总是能在tomcat中得到 体现。因为tomcat技术先进、性能稳定…

git搭建远程仓库

前言&#xff1a;我们现在搭建远程仓库&#xff0c;常见的&#xff0c;是去github、gitlab、gitee等这类第三方平台网站上进行部署。咱就顺道说说这三个的区别。 github 是面向全世界的&#xff0c;由国外开发的&#xff0c;基本上放在上面都是开源的&#xff0c;私人仓库好像…

助力工业物联网,工业大数据之脚本开发【五】

01&#xff1a;脚本开发思路目标&#xff1a;实现自动化脚本开发的设计思路分析路径step1&#xff1a;脚本目标step2&#xff1a;实现流程step3&#xff1a;脚本选型step4&#xff1a;单个测试实施创建一个文件&#xff0c;存放要采集的表的名称#创建测试目录 mkdir -p /opt/da…

【苹果推iMessage】软件安装UIAPplicationSharedApplicationiMessage

推荐内容IMESSGAE相关 作者✈️IMEAX推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容3.日历推 *** …

CANoe-Macro Recorder(宏模块)

1、引子 初接触宏模块时,我还记得当时我主要的测试内容是RVC/OPS(倒车影像/雷达)和Climate(空调)。当时的测试手法是通过CANoe上的面板,模拟RVC/OPS/Climate ECU发送CAN总线消息给IVI(中控,娱乐音响系统),实现RVC/OPS/Climate功能在IVI上的显示与控制 例如模拟激活…

webpack DefinePlugin解析

DefinePlugin是webpack的一个官方内置插件&#xff0c;它允许在 编译时 将你代码中的变量替换为其他值或表达式。这在需要根据开发模式与生产模式进行不同的操作时&#xff0c;非常有用。例如&#xff0c;如果想在开发构建中进行日志记录&#xff0c;而不在生产构建中进行&…

1603_MIT 6.828 “El Torito” Bootable CD-ROM Format Specification阅读

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 最近正好趁着假期看了下MIT的OS课程&#xff0c;这是里面推荐阅读的一份资料。简单看了一下&#xff0c;整理一下自己的阅读笔记。 只要是涉及到有历史的计算机技术…

一文带你深刻的进入python,并且了解python的优缺点

嗯&#xff0c;你好&#xff0c;感谢您能打开我的文章&#xff0c;在这里我有一个好消息来告诉大家呢&#xff0c;那就是&#xff1a;还有350多天就要过年啦&#xff0c;哈哈哈哈&#xff0c;开不开心&#xff0c;兴不兴奋 名字&#xff1a;阿玥的小东东 学习&#xff1a;pytho…

零代码应用搭建规范建议

文/顿唯 况育军 贺书钿 编辑/杜逸敏 在明道云零代码开发平台里&#xff0c;一个完整的业务应用包含了工作表、视图、角色、自定义页面、工作流五大核心模块&#xff08;统计和外部门户为可选模块功能&#xff09;&#xff0c;基于这些能力模块组件&#xff0c;我们能呈现给用…

飞桨时序建模库PaddleTS及产业应用实践

时间序列&#xff1a; 一种普遍存在的数据形态 众所周知&#xff0c;时间序列是一种普遍存在的数据形态&#xff0c;与我们的日常生活及生产活动密切相关。如&#xff1a;股票指数、原油价格等金融市场数据&#xff1b;温度、湿度等天气数据&#xff1b;振动、转速等工业设备运…

【技术短文】汽车软件质量改善

一、根因分析 根据汽车软件脆弱性主要因素分析&#xff0c;共有10余种因素会导致软件质量问题&#xff1a; 1.项目时间点压力&#xff0c;占比 71&#xff05;2.缺乏安全编程理解/培训&#xff0c;占比 60&#xff05;3.偶然编程错误&#xff0c;占比 55&#xff05;4.缺乏质量…

Tarjan算法的应用---缩点与割点

图论中有时候会涉及到一些连通性问题&#xff0c;主要是针对于点来说&#xff0c;在有向图中有时候需要计算强连通分量&#xff0c;这时候代表分量的的点就非常重要&#xff1b;在无向图中有时候会需要知道割点&#xff0c;用到的算法都是Tarjan&#xff0c;这个算法还是有难理…

了解多线程与并发

文章目录前言继承Thread类实现Runnable接口实现Callable和Future接口线程生命周期线程优先级线程加入操作线程休眠操作中断线程线程安全问题线程同步机制1. 同步代码块2. 同步方法线程暂停与恢复知识拓展死锁前言 &#x1f4cb;前言&#x1f4cb; &#x1f49d;博客&#xff1a…