一、自然連接
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 |