关系型数据库(二)—关系代数

文章目录

  • 前言
  • 一、关系代数
    • 1.关系操作
    • 2.关系代数
  • 二、集合运算
    • 1.传统集合运算
      • (1)并运算
      • (2)差运算
      • (3)交运算
      • (4)笛卡儿积
    • 2.专门的关系运算
      • (1)选择运算
      • (2)投影运算
      • (3)连接运算
        • 条件连接
        • 等值连接
        • 自然连接
        • 左连接与右连接
      • (4)除运算
        • 象极
        • 运算
        • 例子1
        • 例子2
    • 3.查询优化
      • (1)优化准则
  • 总结

前言

本文主要讲解了关系代数


一、关系代数

1.关系操作

关系操作是集合操作,操作的对象及结果都是集合,是一次一集合(Set-at-a-time)的方式。而非关系型的数据操作方式是一次一记录(Record-at-a-time)
在这里插入图片描述
关系模型与其他模型相比,最有特色的是它的数据库语言。这种语言灵活方便、表达能力和功能都很强。

目前关系数据库所使用的语言一般都具有定义、查询、更新和控制一体化的特点,而查询是最主要的部分

所以说,关系数据库的核心部分是查询,故又称为查询语言,而查询的条件要使用关系运算表达式来表示。

因此,关系运算是设计关系数据语言的基础。

按表达查询的方法不同,关系运算可分为关系代数关系演算两大类。

2.关系代数

关系代数是一种抽象的查询语言,它用对关系的运算来表达查询

关系代数

1.运算对象是关系
2.运算结果亦为关系

关系代数的运算符有两类:集合运算符专门的关系运算符
传统的集合运算是从关系的“水平”方向即行的角度进行,专门的关系运算不仅涉及行而且涉及列

二、集合运算

传统集合运算 :

1.并
2.差
3.交
4.笛卡尔积

专门的关系运算:

1.选择运算 
2.投影运算 
3.连接运算 
4.除运算

1.传统集合运算

(1)并运算

在这里插入图片描述

所有至少出现在两个关系中之一的元组集合。
R⋃S={t∣t∈R∪∈t∈S}R\bigcup S =\{ t | t\in R\cup \in t\in S \} RS={ttRtS}
两个关系R和S若进行并运算,则它们必须是相容的:

1.关系R和S必须是同元的,即它们的属性数目必须相同。
2.对任意i,R的第i个属性的域必须和S的第i个属性的域相同。

在这里插入图片描述

(2)差运算

在这里插入图片描述

设关系R和S具有相同的关系模式,R和S的差是由属于R但不属于S的元组构成的集合,记为:

R−S={t∣t∈R∩t∉S}R-S =\{ t | t\in R\cap t\notin S \} RS={ttRt/S}
R与S必须是相容的

在这里插入图片描述

(3)交运算

在这里插入图片描述
既属于R又属于S的元组。记为:
R∩S={t∣t∈R∩t∈S}R\cap S =\{ t | t\in R \cap t\in S \} RS={ttRtS}

关系的交可以用差来表示,即
R∈S=R−R−S)R \in S = R -R – S) RS=RRS)
在这里插入图片描述

(4)笛卡儿积

两个分别为n目和m目的关系R和S的笛卡尔积是一个n+m)n+m)n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1k_1k1个元组,S有k2k_2k2个元组,则关系R和关系S的笛卡尔积有k1×k2k_1\times k_2k1×k2个元组。记为:
R×S={trts^∣tr∈R∩ts∈S}R\times S=\{\widehat{t_rt_s}|t_r\in R\cap t_s\in S\} R×S={trtstrRtsS}
R×SR\times SR×S的度为R与S的度之和,
R×SR\times SR×S的元组个数为R和S的元组个数的乘积。
在这里插入图片描述

2.专门的关系运算

(1)选择运算

从关系中找出满足给定条件的所有元组。
δFR)={t∣t∈R,Ft)=‘真’}\delta_FR)=\{t | t\in R , Ft) = ‘真’\} δFR)={ttR,Ft)=}
从行的角度进行的运算,即水平方向抽取元组。

在这里插入图片描述
经过选择运算得到的结果可以形成新的关系,其关系模式不变, 但其中元组的数目小于或等于原来的关系中的元组的个数,它是原关系的一个子集。

(2)投影运算

从关系中挑选若干属性组成的新的关系 。
ΠAR)={t[A]∣t∈R},A⊆R\Pi_AR) = \{ t[A] | t\in R \} , A\subseteq R ΠAR)={t[A]tR},AR
从列的角度进行的运算,即垂直方向抽取元组。
投影的结果中要去掉相同的行。

在这里插入图片描述

(3)连接运算

从两个关系的笛卡尔积中选取属性间满足一定条件的元组
R⋈AθBS={trts^∣tr∈R∩ts∈S∩tr[A]θts[B]}θ为算术运算,为等号时称为等值连接。A,B为R和S上度数相等且可比的属性列。R\Join_{A\theta B} S = \{\widehat{t_rt_s}|t_r\in R\cap t_s\in S\cap t_r[A]\theta t_s[B] \} \theta为算术运算,为等号时称为等值连接。 A,B为R和S上度数相等且可比的属性列。 RAθBS={trtstrRtsStr[A]θts[B]}θ为算术运算,为等号时称为等值连接。A,BRS上度数相等且可比的属性列。
从定义上可以看出联接运算就是在两个关系的笛卡尔积上进行的选择运算。

条件连接

关系R和S,求R⋈C=ESR \Join_{C=E}SRC=ES

下表为R
R
下表为S
在这里插入图片描述
结果为:
在这里插入图片描述

等值连接

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

有:

自然连接(Natural join)(特殊)
左连接(Left Join)
右连接(Right Join)

自然连接

操作步骤:

1.选择同时出现在R和S中属性相等元组;
2.去掉重复属性。    

可以看出,如果两个关系没有公共属性,自然连接就是笛卡尔积。
下表为R
R
下表为S
在这里插入图片描述
结果为:
在这里插入图片描述

左连接与右连接

左连接(Left Join)
R左连接S:所有来自R的元组和那些连接字段相等处的S的元组。

右连接(Right Join)
R右连接S:所有来自S的元组和那些连接字段相等处的R的元组。

表R:
在这里插入图片描述

表S:
在这里插入图片描述
R左连接S的结果为:

R.B=S.B ∧ R.C=S.C

在这里插入图片描述

R右连接S的结果为:
R.B=S.B ∧ R.C=S.C
在这里插入图片描述

(4)除运算

象极

给定一个关系RX,Z),X和Z为属性组。当t[X]=x时,x在R中的象集Images Set)为:
Zx={t[Z]∣t∈R,t[X]=x}Z_x=\{t[Z]|t\in R,t[X]=x\} Zx={t[Z]tR,t[X]=x}
它表示R中属性组X上值为x的诸元组在Z上分量的集合。

关系R中,A可以取四个值{a1,a2,a3,a4}:

    a1的象集为 {b1,c2),b2,c3),b2,c1)}a2的象集为 {b3,c7),b2,c3)}a3的象集为 {b4,c6)}a4的象集为 {b6,c6)}

在这里插入图片描述

运算

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

R÷S={tr[X]∣tr∈R∩πYS)⊆Yx}Yx:x在R中的象集,x=tr[X]R÷S =\{t_r [X] | t_r \in R\cap \pi_Y S) \subseteq Y_x \} \\Y_x:x在R中的象集,x = t_r[X] R÷S={tr[X]trRπYS)Yx}YxxR中的象集,x=tr[X]
在这里插入图片描述

例子1

R1表:
在这里插入图片描述

R2表:
在这里插入图片描述

R1÷R2的结果:
在这里插入图片描述

例子2

在这里插入图片描述

3.查询优化

将一个关系代数表达式转换为另一个具有较高效率的关系代数表达式的过程称为“查询优化”。

(1)优化准则

① 提早执行选择运算。
② 合并笛卡尔积与其后的选择运算为连接运算。
③ 将投影运算与其后的其他运算同时进行,以避免重复扫描关系。
④ 将投影运算和其前后的二目运算结合起来,以避免为去掉某些字段再扫描一遍关系。
⑤ 执行连接前对关系适当地预处理.就能快速地找到要连接的元组。
⑥ 存储公共子表达式。


总结

文章的不妥之处请读者包涵指正

查看全文

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

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

相关文章:

在这里插入图片描述

关系型数据库(二)—关系代数

文章目录前言一、关系代数1.关系操作2.关系代数二、集合运算1.传统集合运算(1)并运算(2)差运算(3)交运算(4)笛卡儿积2.专门的关系运算(1)选择运算&#xff08……

基于ssm技术的校自助阅览室的设计与实现毕业设计源码242326

SSM校自助阅览室 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对校自助阅览室等问题&……

DNS解析为什么不生效?DNS解析不生效原因分析

网站页面为什么打不开?刚修改过域名解析,为什么不生效?如何查看解析是否生效?很多企业在网站的实际运营中,经常会遇到以上DNS解析问题,给网站的运营管理人员造成诸多困扰,接下来中科三方针对这些……

参考篇-【货位规划的价值所在】

货位规划的概述
定义:
"将货品合理纳入仓库设施,以实现物料搬运最优化和提高空间利用率的目标"。
目的:
处理任意SKU货品时,最大限度的缩短,甚至消除行走时间。 货位规划的价值
按照合理的拣货顺序放置货品,可减少拣货人员数量对应货位规格。
分配相应数……

C++开发过程中的笔记

目录1.#ifndef/#define/#endif2.C中map类型的使用2.1 删除元素2.2 map的用法2.3 判断map中key值是否存在3.虚函数后面的const=04.SDK开发的注意点5.虚函数指针和虚函数表——对象内存布局6.如何编写抽象类接口7.new A与new A)的区别8.C 实例化对象并访问数据成员和……

JNI开发必学C/C++基础

JNI开发系列目录
JNI开发必学C基础JNI开发必学C使用实践Android Studio 4.0.NDK项目开发详细教学Android NDK与JNI的区别有何不同?Android Studio 4.0.NDK .so库生成打包Android JNI的深度进阶学习Android Studio 4.0.NDK开发 This files is not part of the proje……

【Vue3】穿梭框 — 思路与实现分析

CSDN话题挑战赛第2期 参赛话题:学习笔记
*学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。 【Vue3】穿梭框 – 思路与实现分析 🦖我是Sam9029,一个前端 Sam9029的CSDN博客主页:Sam9029的博客_CSDN博……

手把手写算法(学个语言)

文章目录为什么要使用C刷算法?名称空间using namespace std的解释cin和cout输入输出C的头文件C的bool变量C的const定义常量C的string类C的引⽤&和传值的区别C STL库1.vector2.set3.stack4.queue5.map映射)6.unordered_map和unordered_set7.sort函数auto声明&am……

实现简单的shared_ptr

类图如下:
shared_ptr和weak_ptr都有一个基类Ptr_base,Ptr_base有指向资源的指针_Ptr和指向引用计数的指针_Rep
引用计数对象Ref_count封装了对资源以及引用计数对象的释放操作,Ref_count也有一个基类Ref_count_base,封装了对引……

.netcore大型商城系统源码_前后端完全分离_高并发支持_八大数据库

OctShop是一个底层用C#,.net core 6.0编写的大型专业级的,B2B2CO2O一体化的商城系统,并免费提供商城所有系统源码。API接口和系统SDK多语言支持,也可根据客户需求定制相关系统SDK和API接口,可无缝对接第三方系统。支持……

【Linux基础】常用命令整理

ls命令
-a选项,可以展示隐藏的文件和文件夹-l选项,以列表形式展示内容-h,需要和-l搭配使用,可以展示文件的大小单位ls -lah等同于la -a -l -h
cd命令(change directory)
语法:cd [Linux路径]……

客快物流大数据项目(一百一十二):初识Spring Cloud

文章目录
初识Spring Cloud
一、Spring Cloud简介
二、SpringCloud 基础架构图…

C和C++中的struct有什么区别

区别一: C语言中: Struct是用户自定义数据类型(UDT)。 C语言中: Struct是抽象数据类型(ADT),支持成员函数的定义。
区别二:
C中的struct是没有权限设置的&#xff0c……

docker的数据卷详解

数据卷 数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方修改会立即同步
一个数据卷可以同时被多个容器同时挂载,一个容器也可以被挂载多个数据卷
数据卷作用:容器数据持久化 /外部机器和容器间接通信 /容器……

13、Qt生成dll-QLibrary方式使用

Qt创建dll,使用QLibrary类方式调用dll
一、创建项目
1、新建项目->其他项目->Empty qmake Project->Choose 2、输入项目名,选择项目位置,下一步 3、选择MinGW,下一步 4、完成 5、.pro中添加TEMPLATE subdirs&#xff……

基于mapreduce 的 minHash 矩阵压缩

Minhash作用: 对大矩阵进行降维处理,在进行计算俩个用户之间的相似度。
比如: 俩个用户手机下载的APP的相似度,在一个矩阵中会有很多很多的用户要比较没俩个用户之间的相似度是一个很大的计算任务 如果首先对这个矩阵降维处理&am……

关于hashmap使用迭代器的问题

keySet获得的只是key值的集合,valueSet获得的是value集合,entryset获得的是键值对的集合。 package com.test2.test;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;public class mapiterator……

Hadoop入口FileSystem HDFS操作 本地文件合并到HDFS和HDFS文件合并

Hadoop 文件API的起点是FileSystem类。这是一个与文件系统交互的抽象类。存在不同的具体实现子类来处理HDFS和本地文件系统。
HDFS接口的FileSystem对象:
Configuration conf new Configuration);
FileSystem hdfs FileSystem.getconf); HDFS直接操作&#x……

combiner partitioner

combine是在map端进行的,是在patition之后 partitioner也是在map端进行的 combine 适用在每个map端进行简单的合并,同样也是继承Reduce类。…

toString.indexOf:)和subsTring

package com.test2.test;public class subStirngTest {public static void mainString[] args) {String sb"abcdefgh";String sc"abcd:efgh";int splitIndexsc.indexOf":");//找到标识符的位置System.out.printlnsplitIndex);sb.substring1)……

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注