关系代数之连接 (Join)和除(Division)

2023-11-11

关系代数之连接 (Join)和除(Division)

数据库技术中这两个概念,对初学者而言,理解比较困难,本文对此进行深入浅出的解释。

连接 (Join,联接)

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

 

其中A和B分别为R和S上度数相等且可比的属性组。θ是比较运算符。连接运算从R和S的笛卡尔积R×S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系θ的元组。

关系代数的“连接”的等价定义还有许多,如:连接(join,联接)是从两个分别为n, m目的关系R和S的广义笛卡尔积中选取满足给定条件F的元组组成新的关系称为R和S的连接,记作

 

其中A和B分别为R和S上度数相等且可比的属性列,θ是算术比较符(>,≥,<,≤,=,≠)。

理解:从笛卡尔积中选择满足一定条件的部分行。

说明:

① 连接运算中有两种最为重要也最为常用的连接:等值连接(equi-join)和自然连接(Natural join)。

② θ为“=”的连接运算称为等值连接。它是从关系R与S的笛卡尔积中选取A、B属性值相等的那些元组。即等值连接为:

 

③ 自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。即若R和S具有相同的属性组B,则自然连接可记作:

 

自然连接(Natural Join)是一种特殊而常用的连接。若R和S具有相同名的属性组,且连接条件为R和S中两关系所对应的同名属性列的值相等,则称为自然连接。对于自然连接,无须标明条件表达式F,在结果中要把重复的属性去掉。

 

例:有R和S两个关系,如下图:

 

查询关系R中属性C小于关系S中属性E的连接。

 

 

查询关系R中属性B与关系S中属性B相等的相等连接。

 

 

查询关系R中属性B与关系S中属性B相等的自然连接。

 

 

 

除(Division)

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

 

其中Yx为x在R中的象集

关系代数的“除”的等价定义还有许多,但本质相同。例如,有一种比较通俗的说法是:给定关系R(x,y)与S(z)其中x,y,z为属性集(也可为单属性),R中的y和S中的z是同名的属性(集)也可以有不同的属性名, 但必须出自相同的域集。在求解R÷S时,对R按x的值的分组,然后检查每一组,如某一组中的y包含S中全部的z,则取该组中的x的值作为关系P中的一个元组, 否则不取。R÷S的商等于关系P。 

例1、 设关系R, S如下图,计算R÷S的结果。

解:在关系R中,A可以取四个值{a1, a2, a3, a4}。其中:a1的象集为{(b1,c2), (b2,c3), (b2,c1)} ; a2的象集为{(b3,c7), (b2,c3)} ; a3的象集为{(b4,c6)} ; a4的象集为{(b6,c6)} 。

S在(B,C)上的投影为{(b1,c2), (b2,c3), (b2,c1)}

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

 

例2、关系如下,计算R÷S  

  R:   A        B         C        D                  S:     C      D

       1        2         3         4                         3       4

       7        8         5         6                         5       6

       7        8         3         4                         4       2

       1        2         5         6

       1        2         4         2

       7        8         4         2

解:在关系R中,{A,B}可以取四个值{(1,2), (7,8), (1,2)}。其中:(1,2)的象集为{(3,4), (5,6), (4,2)} ; (7,8)的象集为{(5,6), (3,4), (4,2)} ; (1,2)的象集为{(5,6), (4,2)}

S在(C,D)上的投影为{(3,4), (5,6), (4,2)}

显然只有(1,2)和(7,8)的象集包含S在(B,C)属性组上的投影,所以R÷S是:   

               A         B

               1          2

               7          8

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关系代数之连接 (Join)和除(Division) 的相关文章

随机推荐

  • tkinter 动态显示时间的方法

    问题描述 有些小伙伴在使用python做GUI界面的时候可能想添加这么一个小功能 就是在界面的某个角落动态的显示当前的时间 本文将介绍具体方法 方式一 使用组件的after方法 代码如下所示 import time import tkint
  • Vue3之watch和watchEffect实战总结

    watch和watchEffect都是vue3中的监听器 但是在写法和使用上是有区别的 主要是介绍一下watch和watchEffect的使用方法以及他们之间的区别 watch 的工作原理 侦听特定的数据源 并在回调函数中执行副作用 它默认
  • 高分辨率光学遥感影像舰船目标检测与识别算法研究(尹莹莹)

    论文阅读笔记 摘要 本文主要研究海陆背景下的光学遥感图像舰船目标检测与识别技术 重点研究了海陆分离 舰船目标疑似区域检测技术与疑似区域目标识别技术 海陆分离 采用了OTSU与形态学相结合的方法实现海路区域初步划分 再以孤立区域内像素的欧氏距
  • java中jdbc有哪几种形式呢?

    下文笔者讲述java中jdbc的形式简介说明 如下所示 JDBC驱动程序简介 JDBC驱动程序就是数据库厂商根据JDBC规范实现的JDBC实现类 JDBC驱动程序的类型 方式1 通过将JDBC的调用委托给其他编程接口来实现的 这种类型的驱动
  • EDK II Module Writers Guide上

    一 EDK2简介 1 EDK2工作流 二 EDK2 Packages 1 Packages介绍 EDK2 Packages是一个容器 其中包含一组模块及模块的相关定义 每个Package是一个EDK2单元 整个Project的源代码可以被分
  • Android正确的保活方案,不要掉进保活需求死循环陷进

    在开始前 还是给大家简单介绍一下 以前出现过的一些黑科技 大概在6年前Github中出现过一个叫MarsDaemon 这个库通过双进程守护的方式实现保活 一时间风头无两 好景不长 进入 Android 8 0时代之后 这个库就废掉了 最近2
  • 简单工厂模式和策略模式的比较

    代码结构图的区别 首先来看一下简单工厂模式 再看一下策略模式 看完他们的结构图 是不是有种很相似的感觉 唯一不同的就是 简单工厂类 和 Context类 接下来再看一下代码上有什么区别 简单工厂类和Context类中代码的区别 简单工厂类
  • linux查看mysql是否安装了驱动,Linux下查看mysql、apache是否安装,安装,卸载等操做...

    Linux下查看mysql apache是否安装 并卸载 php 指令 ps ef grep mysql 得出结果node root 17659 1 0 2011 00 00 00 bin sh usr bin mysqld safe da
  • Python一些经典例题(2)

    随机生成密码 编写程序 在26个字母大小写和9个数字组成的列表中随机生成10个8位密码 import random n 8 k 10 l list range 0 10 for x in range 65 91 l append chr x
  • DisplayPort1.4协议学习(一)DP协议概览

    DisplayPort1 4协议学习 一 DP协议概览 Note 本文为DP1 4协议学习系列的第一篇 本篇首先从DP整体结构上简要说明DP协议的传输方式 有关传输速率对比的问题 请STFW Search The Fucking Web D
  • 多态,反射及其相关

    多态是OOP的三大特征之一 字面意思 多种形态 多种状态 一个事物具备多种形态 例如 水 具备水蒸气 冰 赛博坦星人 汽车人 飞机人 汽车 动物 人 猿猴 猫 吃 叫 睡 官方描述 不同对象可以响应 调用 同一个方法 产生不同的结果 多态不
  • 用c++写一个windows窗口程序, 程序标题是你好

    include
  • Hibernate (一)

    文章目录 一 配置Hibernate 1 先创建数据库表 2 创建一个hibernate工程 3 导入hibernate所依赖的jar包 4 创建实体 product 5 配置 Product hbm xml 6 配置 hibernate
  • 工程师事业的思考(分享一些好的面试题)

    题记 最近去参加了一场技术交流会 小圈子内的技术交流 有来自大厂的一些高层工程师 做技术嘛 这条路其实是木有尽头的 说到底还是得要基础好哇 我目前是在做区块链行业 做数字货币交易所 然后很多朋友就是觉得非常不理解了嘛 就像李笑来说的那样 可
  • python程序员,编写远程监控程序,用微信监控女友都在做些什么?

    好奇心跟疑心 很多人都有好奇心或者疑心 有人说中国人最大的特点就是围观 你的女男朋友现在在做什么 有没有做什么对不起自己的事情 在跟谁聊天 是不是好奇想知道 python程序员 编写远程监控程序 用微信监控女友都在做些什么 用python写
  • Vue--插槽 vs 高复用组件

    为什么要用插槽 组件的最大特性就是提高复用性 而插槽的作用是最大程度的优化组件的可复用能力 组件的复用常见场景如多个页面有同样的UI结构 通过组件间通讯机制传递数据 以此达到同一套代码渲染不同数据的效果 然而 这种利用组件间通讯机制只能满足
  • 单机Qps上限是多少?

    现在这个年代 你要是不懂高并发 你都不好意思说自己是搞互联网的 一 什么是并发 什么是高并发 并发 两个及以上的行为一起发生 比如你一边吃饭一边看电视 高并发 多个行为 至于是多少 这个没有定数 你可以认为是100 1000 一起发生 二
  • Spring Boot 中的 @Id 注解是什么,原理,如何使用

    Spring Boot 中的 Id 注解是什么 原理 如何使用 在 Spring Boot 中 Id 注解是一个非常重要的注解 它用于映射实体类中的主键字段 本文将介绍 Id 注解的作用 原理和使用方法 1 Id 注解的作用 在 Sprin
  • 全国计算机考试三级Linux应用与开发技术考试大纲

    基本要求 掌握操作系统的基本概念 组成 功能和原理 了解 Linux系统的发展历程 特点 应用现状和前景 掌握常用的Linux命令和Shell脚本编程基本技术 具备Linux系统安装 配置 管理与维护的基本技能 熟悉Linux系统的常用软件
  • 关系代数之连接 (Join)和除(Division)

    关系代数之连接 Join 和除 Division 数据库技术中这两个概念 对初学者而言 理解比较困难 本文对此进行深入浅出的解释 连接 Join 联接 定义 从两个关系的笛卡尔积中选取属性间满足一定条件的元组 记作 其中A和B分别为R和S上