关系模型知识点总结(3)—— 关系操作中的关系代数(含题目及详细分析)

简介: 我们设R是n目关系,有K1个元组,S是m目关系,有K2个元组,那么他们的笛卡儿积其实就是排列组合,如果将R关系中的每一行看作是abc,S关系中的每一行看作是xyz,那么他们两两组合的方式一共有9种,故 当R有K1个元组,S有K2个元组时,R和S的笛卡儿积行一共有K1×K2个元组;而由于每个关系里都有各自属性,所以R和S的笛卡儿积列一共有(m+n)个元组

一、前言


本文将讲述有关于关系代数的知识点,并附例题加深印象


二、概述


  • 抽象的查询语言
  • 用对关系的运算来表达查询
  • 运算对象:关系
  • 运算结果:关系
  • 运算符:传统集合运算符 和 专门的关系运算符


三、传统的集合运算符


09661558d1594d58be960e864f33aa97.jpg


1.概述


  • 将关系看作是元组的集合
  • 运算是从行的角度进行的
  • 其中包括并、差、交 和 笛卡儿积


2.∪(并)


R∪S={ t | t∈R ∨ t∈S }简单来说,就是把两个关系中所有的元素合并成一张表


例如:


关系R


A B C
1 2 3
4 5 6
7 8 9


关系S


A B C
1 2 3
0 5 6
7 3 9


那么 R∪S 为:


A B C
1 2 3
4 5 6
7 8 9
0 5 6
7 3 9


3.∩(交)


R∩S={ t | t∈R ∧ t∈S }简单来说,就是把两张表格中相同的元素提取出来,组成一个新的表


例如:


关系R


A B C
1 2 3
4 5 6
7 8 9


关系S


A B C
1 2 3
0 5 6
7 3 9


那么 R∩S 为:


A B C
1 2 3


4.-(差)


R-S={ t | t∈R ∧ t∉S } 简单来说,就是将R中两个关系中共同元素去除


例如:


关系R


A B C
1 2 3
4 5 6
7 8 9


关系S


A B C
1 2 3
0 5 6
7 3 9


那么 R-S 为:


A B C
4 5 6
7 8 9


5.笛卡儿积


R×S={(x,y)|x∈R∧y∈S} 这个有点难以理解。。。那么直接看例子吧


例如:


关系R


A B C
1 2 3
4 5 6
7 8 9


关系S


A B C
1 2 3
0 5 6
7 3 9


那么 R×S 为:


R.A R.B R.C S.A S.B S.C
1 2 3 1 2 3
1 2 3 0 5 6
1 2 3 7 3 9
4 5 6 1 2 3
4 5 6 0 5 6
4 5 6 7 3 9
7 8 9 1 2 3
7 8 9 0 5 6
7 8 9 7 3 9


我们设R是n目关系,有K1个元组,S是m目关系,有K2个元组,那么他们的笛卡儿积其实就是排列组合,如果将R关系中的每一行看作是abc,S关系中的每一行看作是xyz,那么他们两两组合的方式一共有9种,故 当R有K1个元组,S有K2个元组时,R和S的笛卡儿积行一共有K1×K2个元组;而由于每个关系里都有各自属性,所以R和S的笛卡儿积列一共有(m+n)个元组


PS:如果概念性语言描述不清楚的话,可以看这篇【关系模型知识点总结(1)—— 关系数据结构】里面有对专业名词的解释


四、专门的关系运算


1.概述


  • 从关系R中选取使得逻辑表达式F为真的元组
  • F:选择条件,即逻辑表达式,取值为真/假,一般形式为X1θY1,θ为> / < / <= / >= / <>
  • 从行的角度运算


2.记号


  • 关系R(A1,A2,···,An),t∈R表示t是R的元组
  • t[Ai]代表元组t中相应于属性Ai的分量
  • 若 A={Ai1,Ai2,···,Aik},则 A是属性列/属性组
  • t[A]=(t[Ai1],t[Ai2],···,t[Aik])表示元组t在数学列A上每个分量的集合


3.象集


  • 给定一个关系R(X,Z),X和Z为属性组
  • 当t[X]=x,x在R中象集定义为 Zx={ t[Z] | t∈R,t[X] =x }


列如:


A B
X1 Z1
X1 Z2
X1 Z3
X2 Z4
X2 Z5
X3 Z6


X1在R中的象集ZX1 = {Z1,Z2,Z3}


X2在R中的象集ZX2 = {Z4,Z5}


X3在R中的象集ZX2 = {Z6}


4.选择


  • σF ( R ) {t|t∈R∧F(t)=‘真’}
  • 提取出来的是某一行


列如:


Student


ID Name Sdept
001 张三 CS
002 李四 IS
003 王五 MA


σ Sdept=‘CS’(Student) 结果为:


ID Name Sdept
001 张三 CS


5.投影


  • ΠA( R )={ t[A] | t∈R }
  • 从列的角度来运算
  • 将提取出来的属性及值组成新的关系
  • 若有重复元组,要取消


例如:


Student


ID Name Sdept
001 张三 CS
002 李四 IS
003 王五 MA


ΠSdept(Student)的结果为:


Sdept
CS
IS
MA


6.连接


  • 从两个关系的笛卡尔积中选取属性间满足一定条件的元组
  • 同名属性才能进行自然连接
  • 自然连接要去掉重复属性,等值连接不用


df24d3c195a848f1adad927eef929d6a.jpg


🔴等值连接


961850c160904439ba18f8bc29ab0801.jpg


例如:


R


A B C
a1 b1 5
a1 b~12 6
a2 b3 8
a2 b4 12


S


B E
b1 3
b2 7
b3 10
b3 2
b5 2


等值连接后结果为:


A R.B C S.B E
a1 b1 5 b1 3
a1 b~12 6 b2 7
a2 b3 8 b3 10
a2 b3 8 b3 2


🔴自然连接


f5af8a22cc9d4a148da06ddf87473675.jpg

例如:


R


A B C
a1 b1 5
a1 b~12 6
a2 b3 8
a2 b4 12


S


B E
b1 3
b2 7
b3 10
b3 2
b5 2


自然连接后结果为:


A B C E
a1 b1 5 3
a1 b~12 6 7
a2 b3 8 10
a2 b3 8 2


7.悬浮元组


  • 操作时被舍弃的元组


例如:


R


A B C
a1 b1 5
a1 b~12 6
a2 b3 8
a2 b4 12


S


B E
b1 3
b2 7
b3 10
b3 2
b5 2


在进行连接时,下面两组都是被舍弃的元组,因为属性值不相同,他们就是悬浮元组


A B C
a2 b4 12


B E
b5 2


🔴外连接


将悬浮元组保存在关系中,在其它属性填上空值(NULL) 简单来说,就是把表中所有元素都填到新表中,如果某行或者某列中只有一个关系有值,另一个没有,就用NULL代替


A B C E
a1 b1 5 3
a1 b~12 6 7
a2 b3 8 10
a2 b3 8 2
a2 b4 12 2NULL
NULL b5 NULL 2



只保留左边关系R的悬浮元组 简单来说,就是保证R中所有元素都在新表里面了,这行中S的某个属性没有值的话,用NULL代替


A B C E
a1 b1 5 3
a1 b~12 6 7
a2 b3 8 10
a2 b3 8 2
a2 b4 12 2NULL


🔴右外连接


只保留右边关系S的悬浮元组 简单来说,就是保证S中所有元素都在新表里面了,这行中R的某个属性没有值的话,用NULL代替


A B C E
a1 b1 5 3
a1 b~12 6 7
a2 b3 8 10
a2 b3 8 2
NULL b5 NULL 2


8.除运算


c108d3e6f85a477f86e835a815d6edd2.jpg


列如:


R


A B C
a1 b1 c2
a2 b3 c7
a3 b4 c6
a1 b2 c3
a4 b6 c6
a2 b2 c3
a1 b2 c1


S


B C D
b1 c2 d1
b2 c1 d1
b2 c3 d2


我们来求a1、a2、a3、a4的象集


a1:{ (b1,c2),(b2,c3),(b2,c3)}


a2:{(b3,c7),(b2,c3)}


a3:{(b4,c6)}


a4:{(b6,c6)}


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


所以R÷S = {a1}


五、结语


概念如果混淆不清的话,建议独立做例题,这样可以加深记忆

相关文章
|
5月前
|
移动开发 人工智能 JavaScript
程序员必知:关系的基本概念及其性质
程序员必知:关系的基本概念及其性质
92 3
|
5月前
|
C语言 C++ 容器
c++primer plus 6 读书笔记 第五章 循环和关系表达式
c++primer plus 6 读书笔记 第五章 循环和关系表达式
|
6月前
R语言表与因子(详细知识点,深入知识点后续会补充!)
R语言表与因子(详细知识点,深入知识点后续会补充!)
46 2
|
6月前
|
Java C++ Python
面向对象特性分析大全集
面向对象特性分析大全集
|
6月前
|
C语言
【数据结构入门指南】二叉树链式结构的实现(保姆级代码思路解读,非常经典)
【数据结构入门指南】二叉树链式结构的实现(保姆级代码思路解读,非常经典)
152 0
|
JavaScript 数据库
关系数据库——关系数据结构及形式化定义
关系数据库——关系数据结构及形式化定义
133 0
|
存储 JavaScript 数据库
第2章 关系数据库——2.1关系数据结构及形式化定义
第2章 关系数据库——2.1关系数据结构及形式化定义
|
前端开发
前端学习案例5-树结构的术语1
前端学习案例5-树结构的术语1
58 0
前端学习案例5-树结构的术语1
|
前端开发
前端学习案例4-树结构的术语
前端学习案例4-树结构的术语
53 0
前端学习案例4-树结构的术语
|
存储
数据结构开篇(数据的概念以及数据的结构与关系)
数据结构开篇(数据的概念以及数据的结构与关系)
114 0