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

关系代数之连接 (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

 

 

 

### SQL与关系代数运算符 #### UNION (并集) 在SQL中,`UNION`操作用于组合两个或多个SELECT语句的结果集。这类似于关系代数中的并集运算,它返回的是所有出现在任意一个查询结果中的记录,去重复项。 ```sql SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; ``` 此命令会自动删任何重复的数据行;如果希望保留所有的数据行,则可使用 `UNION ALL`[^1]。 #### INTERSECT (交集) 虽然不是所有数据库都支持,但在某些版本的SQL中存在`INTERSECT`关键字来表示交集运算,即只选取那些同时存在于两个表中的记录。对于不直接提供该功能的DBMS来说,可以通过其他方式模拟这一行为,比如利用子查询IN/EXISTS谓词[^3]。 #### EXCEPT 或 MINUS (差集) 同样,在一些特定环境下,SQL提供了`EXCEPT`(有时也被写作MINUS)用来执行集合间的差异计算—找出左表中有而右表里没有的元素。当目标环境缺乏原生的支持时,也可以借助NOT IN或者LEFT JOIN加上NULL检测的方法达成相同效果。 #### CARTESIAN PRODUCT / CROSS JOIN (笛卡尔积) CROSS JOIN实现了无条件连接两表内每一行的可能性,形成新的复合表格,其规模等于参与交叉乘法各成员数量之积。这种机制正好对应于理论上的全排列概念,也是构建复杂多维分析框架的基础之一。 #### SELECT (投影) 尽管严格意义上讲这不是一种二元运算符,但是通过指定列名列表的方式可以在FROM之后限定输出字段范围,从而完成所谓的“垂直分割”,也就是选择特定属性的过程。例如: ```sql SELECT name, age FROM people; ``` 这里的选择实际上是从原始关系抽取了一部分特性出来构成新实体,符合关系代数里的投影定义[^4]。 #### WHERE (选择) WHERE子句允许基于给定条件筛选符合条件的记录,这是对整个关系施加水平方向约束的一种手段,能够有效地缩小处理空间至感兴趣的部分。如下面的例子所示: ```sql SELECT * FROM employees WHERE salary > 50000; ``` 上述代码片段展示了如何运用布尔表达式作为过滤器,挑选出工资高于五万美金的所有员工条目。 #### JOINs (自然联接其他类型的联接) JOIN家族涵盖了多种变体形式,包括但不限于INNER JOIN、OUTER JOIN(又细分为LEFT OUTER JOIN、RIGHT OUTER JOIN以及FULL OUTER JOIN),它们各自有着独特的匹配逻辑服务场景。这些高级链接技术本质上都是围绕着共同键值建立联系,并据此整合来自不同源的信息资源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值