一、自然连接
1.笛卡尔乘积
两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。(其实就是两个集合元素的所有可能的组合)
例1. A={a,b}, B={0,1,2},则
A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}
例2. 又例如下面两个表的笛卡尔积
a1 | a2 | a3 |
a4 | a5 | a6 |
表R
b1 | b2 | b3 |
b4 | b5 | b6 |
b7 | b8 | b9 |
表S
R×S的结果为
a1 | a2 | a3 | b1 | b2 | b3 |
a1 | a2 | a3 | b4 | b5 | b6 |
a1 | a2 | a3 | b7 | b8 | b9 |
a4 | a5 | a6 | b1 | b2 | b3 |
a4 | a5 | a6 | b4 | b5 | b6 |
a4 | a5 | a6 | b7 | b8 | b9 |
可能会问,为什么例1是集合元素的组合,而这两个表是行的组合呢?因为在数据表中,行一般就是基本元素。比如学生成绩表。
数据项就是所谓的数据属性,所有的数据属性组成的最小数据(即一行数据)就是一个数据元素。
2.自然连接
如果关系R与S具有相同的属性组B,且该属性组的值相等时的连接称为自然连接,结果关系的属性集合为R的属性并上S减去属性
B的属性集合。
举个栗子,将上边两个表稍微改造一下,如下。
a1 | a2 | a3 |
a4 | a5 | a6 |
表R
a3 | b2 | b3 |
a3 | b5 | b6 |
a6 | b8 | b9 |
表S
假设表R的第三列和表S第一列是相同属性的数据,现在将这两个表自然连接。
(分步来)
先进性笛卡尔乘积,得到
a1 | a2 | a3 | a3 | b2 | b3 |
a1 | a2 | a3 | a3 | b5 | b6 |
a1 | a2 | a3 | a6 | b8 | b9 |
a4 | a5 | a6 | a3 | b2 | b3 |
a4 | a5 | a6 | a3 | b5 | b6 |
a4 | a5 | a6 | a6 | b8 | b9 |
然后将相同的合并,不同的删除所在行,得到自然连接结果
a1 | a2 | a3 | b2 | b3 |
a1 | a2 | a3 | b5 | b6 |
a4 | a5 | a6 | b8 | b9 |