关系代数运算So Easy

关系代数是以关系为运算的一组高级运算的集合。由于定义为属性个数 相同的元组的集合,因此集合代数的操作就可以引入到关系代数中。关系代数也可以看做是一种抽象的查询语言,是对关系的运算来表达查询的。任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。所以运算对象、运算符、运算结果是运算的三大要素。

关系代数的运算对象是关系,运算结果亦为关系。关系代数用到的运算符包括四类:集合运算符、专门的关系运算符、算术比较符和逻辑运算符。如下表:

关系代数可分为两类:传统的集合操作:并、差、交、笛卡尔积(乘)、笛卡尔积的逆运算(除法)和扩充的关系操作:对关系进行垂直分割(投影)、水平分割(选择)、关系的结合(连接、自然连接)。

一、五个基本操作:

1.并 (Union):关系R和S具有相同的关系模式,R和S的并是由属性R和S的元组构成的集合。 形式定义如下:

R∪S={t|t∈R∨ t∈S} , t 是元组变量,R和S的元素相同 

其结果由R和S的元素组成

2.差 (Difference): 关系R和S具有相同的关系模式,R和S的差由属于R但不属于S的元组构成的集合。 形式定义如下:

R-S={t|t∈R ∧ t¢S)  t 是元组变量,R和S的元素相同

其结果由属于R不属于S的所有元组构成

3.笛卡尔积(Cartesian Product) :广义笛卡尔积是一个(r+s)列的元组的集合。形式定义如下:

4.投影(Projection):对一个关系进行垂直分割,消去某些列,并重新安排列的顺序。记作:

  ΠA(R) = { t[A] | t∈R }

其中A为R中的属性列。

5.选择(Selection):根据某些条件对关系做水平分割,即选取符合条件的元组。

σF(R) = {t|t∈R ∧ F(t)=true}

σ为选择元算符,F表示选择条件,它是一个逻辑表达式,取逻辑值‘真’或‘假’。

举例说明:下面为关系R和关系S 两张表:

(1) 并运算              (2)差运算               (3)笛卡尔积运算

                  

(5)投影

(6)选择

二、四个组合操作

1.交(Intersection):由属于R和S的元组构成的集合。记作:

R∩S={t|t∈R∧t∈S}由于R∩S=R(R-S),或R∩S=S-S(S-R) 得到的,因此交操作不是一个独立的操作。

2.连接(Join):连接也称为θ连接,它是从两个关系的笛卡尔积中选取属性中满足一定条件的元组。记作:

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

下图表示关系R和S的连接操作

连接操作中比较重要且常用的连接是等值连接和自然连接。等值连接:θ为“=”时的连接运算称为等值运算,它是从R和S中选取R中的A属性组上的元组等于S中B属性组上的元组。自然连接(Natural join):自然连接用R连接R ? S表示,是一种特殊的等值连接,一般使用在R和S中有公共属性的情况中。例如,R和S中有相同的属性B记作:

举例:有关系R和关系S两张表
下图表示关系R和S的自然连接:

3.除法 (Division):设关系R和S的元数分别为r和s(设r>s>0),那么R÷S是一个(r-s)元的元组集合。

例如:有三张表,分别是R、COURSE1和COURSE2
(1)R÷COURSE1 表示 至少选修COURSE1课程的学生名单

(2)R÷COURSE2 表示至少选修COURSE2课程的学生名单

关系代数演算So Easy的更多相关文章

  1. 【转】Windows下使用libsvm中的grid.py和easy.py进行参数调优

    libsvm中有进行参数调优的工具grid.py和easy.py可以使用,这些工具可以帮助我们选择更好的参数,减少自己参数选优带来的烦扰. 所需工具:libsvm.gnuplot 本机环境:Windo ...

  2. Struts2 easy UI插件

    一.easy UI是类似于jQuery UI的插件库,它提供了丰富的各种常用插件:tree.datagrid... tree插件: 语法:$(selector).tree([settings]); 常 ...

  3. Easy UI常用插件使用

    一.easy UI是类似于jQuery UI的插件库,它提供了丰富的各种常用插件:tree.datagrid... tree插件: 语法:$(selector).tree([settings]); 常 ...

  4. UVA-11991 Easy Problem from Rujia Liu?

    Problem E Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for ...

  5. CodeForces462 A. Appleman and Easy Task

    A. Appleman and Easy Task time limit per test 1 second memory limit per test 256 megabytes input sta ...

  6. easy ui插件

    简介: easy UI是类似于jQuery UI的插件库 注意:多脚本同时使用时,注意脚本冲突问题. 常用插件: 1.tree插件(tree插件实现动态树形菜单) 2.datagrid插件(datag ...

  7. 用TPP开启TDD的easy模式

    Test-Drived Development 测试驱动开发三步曲:写一个失败的测试用例->编写生产代码通过这个测试用例(transformation)->重构(refactor).重构是 ...

  8. Easy Sysprep更新日志-skyfree大神

    Easy Sysprep更新日志: Skyfree 发表于 2016-1-22 13:55:55 https://www.itsk.com/forum.php?mod=viewthread&t ...

  9. [官方软件] Easy Sysprep v4.3.29.602 【系统封装部署利器】(2016.01.22)--skyfree大神

    [官方软件] Easy Sysprep v4.3.29.602 [系统封装部署利器](2016.01.22) Skyfree 发表于 2016-1-22 13:55:55 https://www.it ...

随机推荐

  1. 猜socklen_t的原型

    编写tcp时碰到这个类型,感觉他就是int型. 百度了一下: typedef int socklen_t typedef int ssize_t 我去/usr/include 下grep -r soc ...

  2. js如何判断当前文本的输入状态——中文输入法的那些坑

    相信各位在平时接需求的时候肯定会遇到这样的一些需求,例如,要求输入框限制输入长度,限制输入类型,限制只能英文输入,限制只能输入大写字母等等,这时候我们一般的思路无非两种,一种是弹出特定的键盘,第二种是 ...

  3. Json文件转Excel

    先创建一个web项目,在根目录放置需要转换的json文件,直接读取静态Json文件加载数据进行转换,代码如下: string Json = string.Empty; List<object&g ...

  4. 基于pthread实现读写锁

    读写锁可用于在多线程访问map等数据结构时使用 #include <pthread.h> class ReadWriteLock { public: ReadWriteLock() { p ...

  5. Unity 5.6中的混合光照(上)

    https://mp.weixin.qq.com/s/AbWM21sihHw5pFdMzENDPg 在Unity 5中,光照得到了很大的改进.现在,创建高度逼真的游戏已成为可能.但是,出于对性能的考虑 ...

  6. express使用session会话

    前几周在学习nodejs基础,发现nodejs没有session会话变量,导致登录注册实现多了很多步骤.现在记录一下express中会话变量用法 安装express-session方法: 1.cnpm ...

  7. Jenkins+Git+Docker+K8s部署

    准备工作 Jenkins已安装 Docker和K8s部署运行成功 代码管理工具使用Git 最近公司项目使用Jenkins+Git+Docker+K8s进行持续化构建部署,这里笔者整理了一下构建部署的相 ...

  8. plsql developer 执行sql 文件

    用 Command Window,执行 @'sql file path' 注意,上面sql文件路径要加单引号

  9. 调试接口,返回的json数据,我定义了一个类,用来序列化,其中有一个字段定义为string 然后序列化的时候报错

    调试接口,返回的json数据,我定义了一个类,用来序列化,其中有一个字段定义为string 然后序列化的时候报错 在需要解析的类型类上加上声明 eg:

  10. [Leetcode] 002. Add Two Numbers

    https://leetcode.com/problems/add-two-numbers/ public class Solution { public ListNode addTwoNumbers ...