首页 > 编程语言 >编程语言中,差、交、并、自然连接、选择、投影、笛卡尔积分别都是什么运算...

编程语言中,差、交、并、自然连接、选择、投影、笛卡尔积分别都是什么运算...

时间:2024-03-07 15:01:37浏览次数:27  
标签:关系 ... 运算 编程语言 笛卡尔 投影 元组 选取 属性

原文:https://blog.csdn.net/muzihuaner/article/details/119529646

交(Intersection):

关系R与关系S的交由既属于R又属于S的元组组成,即R与S中相同的元组,组成一个新关系,其结果仍为n目关系。记作:R∩S={t|t∈R ∧ t∈S}

简单来说,运算结果就是两或多个实体集所共有的部分

 



并(Union):

关系R和关系S的并由属于R或属于S的元组组成,即R和S的所有元组合并,删去重复元组,组成一个新关系,其结果仍为n目关系(“n目”指关系模式中属性的数目为n) 。记作:R∪S={t|t∈R∨t∈S}

简单来说,运算结果为两或多个实体集加起来,然后重复的部分只留下一个

 


差(Difference)

关系R与关系S的差由属于R而不属于S的所有元组组成,即R中删去与S中相同的元组,组成一个新关系,其结果仍为n目关系。记作:R-S={t|t∈R∧┐t∈S}

简单来说,运算结果为,在表R中去掉表S也有的部分

 



广义笛卡尔积(Extended Cartesian Product)

两个分别为n目和m目关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1*k2个元组,记作:R×S={tr⌒ts| tr∈R∧ts∈S}

或记做R×S={(r1,…,rn ,s1,…,sm)∣((r1,…,rn)∈R∧(s1,…,sm)∈S)

r,s为R和S中的相应分量。

简单来说,就是把R表的第一行与S表第一行组合写在一起,作为一行。然后把R表的第一行与S表第二行依此写在一起,作为新一行。以此类推。当S表的每一行都与R表的第一行组合过一次以后,换R表的第二行与S表第一行组合,以此类推,直到R表与S表的每一行都组合过一次,则运算完毕。

如果R表有n行,S表有M行,那么笛卡尔积R×S有n×M行。

 



选取(Selection)

选取运算是单目运算,是根据一定的条件在给定的关系R中选取若干个元组,组成一个新关系,记作:σF(R)={t|t∈R∧F(t)为真}

其中,σ为选取运算符,F为选取的条件,它由运算对象(属性名、常数、简单函数)、算术比较运算符( > ,≥,<,≤,=,≠)和逻辑运算符(∨ ∧ ┐)连接起来的逻辑表达式,结果为逻辑值“真”或“假”。

选取运算实际上是从关系R中选取使逻辑表达式为真的元组,是从行的角度进行的运算。

简单地说,运算结果就是符合筛选条件的行

选择是根据给定的条件选择关系R中的若干元组组成新的关系,是对关系的元组进行筛选。选择运算示意图如下:

 



投影(Projection)

投影运算也是单目运算,关系R上的投影是从R中选择出若干属性列,组成新的关系,即对关系在垂直方向进行的运算,从左到右按照指定的若干属性及顺序取出相应列,删去重复元组。记作:ΠA(R)={t[A]|t∈R}

其中A为R中的属性列,Π为投影运算符。

从其定义可看出,投影运算是从列的角度进行的运算,这正是选取运算和投影运算的区别所在。选取运算是从关系的水平方向上进行运算的,而投影运算则是从关系的垂直方向上进行的。

简单地说,就是选取符合筛选条件的列,然后按照你所需要的顺序重新排列。

连接(Join)

连接运算是二目运算,是从两个关系的笛卡尔积中选取满足连接条件的元组,组成新的关系。

所谓自然连接就是在等值连接的情况下,当连接属性X与Y具有相同属性组时,把在连接结果中重复的属性列去掉。即如果R与S具有相同的属性组Y,则自然连接可记作:R*S={t r⌒ts |tr∈R∧ts∈S∧tr[Y]=ts[Y]}

自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。

 



————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/muzihuaner/article/details/119529646

标签:关系,...,运算,编程语言,笛卡尔,投影,元组,选取,属性
From: https://www.cnblogs.com/cdaniu/p/18058901

相关文章

  • 2252309------对飞机(航空)订票系统(C语言)进行逆向学习、分析、思考、设计构思、改进....
    **飞机订票系统**一、资料来源CSDN博主吴朋奉阅读量最高的一篇博文--飞机订票系统(C语言)----https://blog.csdn.net/weixin_47774641/article/details/111398063?spm=1001.2014.3001.5506二、运行环境Windows11+DEVC++三、源代码(来自博主吴朋奉)......
  • 2024-03-06:用go语言,每一种货币都给定面值val[i],和拥有的数量cnt[i], 想知道目前拥有的
    2024-03-06:用go语言,每一种货币都给定面值val[i],和拥有的数量cnt[i],想知道目前拥有的货币,在钱数为1、2、3...m时,能找零成功的钱数有多少?也就是说当钱数的范围是1~m,返回这个范围上有多少可以找零成功的钱数。比如只有3元的货币,数量是5张,m=10。那么在1~10范围上,只有钱数是3、6......
  • INSERT...SELECT语句对查询的表加锁吗
    前言:insertintot2select*fromt1;这条语句会对查询表t1加锁吗?不要轻易下结论。对GreatSQL的锁进行研究之前,首先要确认一下事务的隔离级别,不同的事务隔离级别,锁的表现是不一样的。实验:创建测试表t1,t2greatsql>createtablet1(idintprimarykey,c1varchar(10),c2......
  • 网络安全入门(持续更新...)
    第零章网络安全概述网络安全是什么网络安全基本要素(CIA)机密性(Confidentiality):确保一些重要信息/敏感数据不会被未授权访问(不会被窃取);完整性(Integrity):确保数据在传输过程中不会被篡改;可用性(Availability):确保已授权人员可以正常获取数据;网络安全关心什么网络通信安全:......
  • Python:如何风骚而又不失优雅的使用Switch...Case
    本渣PHP屌丝一枚,最近在用Python做一个东西碰到了这个问题,在这里给没踩过坑的朋友分享下以Python2.7为例从前有座山碰到参数特别多的情况的时候总是看着一堆if...elseif抓狂,斩不断,理还乱,幸好有Switch...Case可以很方便的处理多种情况的参数但是在Python中没有Switch...Case......
  • 接口测试-json文件读取报java.lang.ClassCastException: java.util.LinkedHashMap can
    问题原因:从json文件中读取的信息为hashMap,与预期(类对象)格式不匹配,无法解析。问题分析:json文件包含一个json串列表,代表向接口中传递不同的参数组合,通过下面方法读取json文件信息,反序列化成类对象,并把这些赋值的对象进行接口请求参数进行传递。publicList<T>getReadValuesLi......
  • Go - ...
    Copiedfromtheoutputof'gohelppackages': Animportpathisapatternifitincludesoneormore"..."wildcards, eachofwhichcanmatchanystring,includingtheemptystringand stringscontainingslashes.Suchapatternexpan......
  • 主流编程语言的“介绍”与“选择”
    前言:编程语言本身没有优劣之分,不同的语言适合不同的场景,文中说的建议,多是站在小白要就业的立场给出的建议。正文我们看这张导图,这张图右侧是前端类的语言,左侧是服务端的语言: 我们先说右侧。第一个就是JavaScript,简称JS。我强调下他和Java是没有关系的,只是名字类似。......
  • 记一次酣畅淋漓的 K8s Ingress 排错过程(302,404,503,...)
    故事开始第1关:【流量重定向到/】第2关:【应用返回302,重定向到/,引入503错误】第3关:【静态资源访问遇到503问题】第4关:【静态资源访问遇到403问题】第5关:【WebSocketclosewithstatuscode1006】最后效果故事开始如果你配置过Ingress,那你一定遇到过......
  • [1] C++编程语言
    week9day1 输出指令//控制台打印std::cout<<"HelloWorld";//简化std命名空间usingnamespacestd;//转义字符cout<<"\n";//\n会被渲染成前面有\的前提下\n不会被渲染cout<<"\\n";\n;<<endl;换行; 系统指令//system()可以调用CMD......