就是愛分享
SQL合併查詢(Join)是使用在多個資料表的查詢,其主要的目的是將關聯式資料庫正規化分析分割的資料表,還原成使用者所需的資訊。因為正規化的目的是避免異動(新增、刪除及修改)操作中易發生異常現象,也可以避免不必要的人工資料操作和不小心將重要資料刪除,但關聯被分割之後所產生的問題在於查詢上的不便性會發生,所以才會有合併理論。

在合併理論中,首先介紹「卡氏積」(Cartesian Product),也稱之為「交叉乘積」(Cross Product)或稱為「交叉合併」(Cross Join),卡氏積是將兩個關聯做相乘,所得結果是來自所有可能性的對應(Mapping)關係所呈現出來,再將各自的屬性全部列出。

但產生如此的卡氏積之後,或許會發現此新的關聯中的資料,甚多不合情理的值組,所以再加上兩關聯之間的「條件限制」或稱為「對應」(Mapping)關係,稱為內部合併(Inner Join)又稱為條件式合併(Condition Join)。

不過在內部合併的過程中,有些值組會因為彼此無法互相對應而消失不見,如果使用者認為不合理,就可以利用外部合併(Outer Join),而合併之後對應不到的關聯值組,會在屬性填入空值(Null Value)。主要可分為三種:
左邊外部合併(Left Outer Join)-左邊的資料表擁有優先權,左邊所有的資料都會被包含,而右邊只有符合的資料才會被包含。
右邊外部合併(Right Outer Join)-右邊的資料表擁有優先權,右邊所有的資料都會被包含,而左邊只有符合的資料才會被包含。
完全外部合併(Full Outer Join)-左邊外部合併與右邊外部合併的聯集。



(a)所表示的是「內部合併」,兩個關聯之間,具有某些(一個或多個)屬性值彼此「對應」所合併出來的結果。
(b)所表示的是在左邊關聯中的某些(一個或多個)屬性值,無法對應到右邊相對應的屬性值的值組,所合併出的結果在右邊的屬性值將會是空值(Null Value)。
(c)所表示的是在右邊關聯中的某些(一個或多個)屬性值,無法對應到左邊相對應的屬性值的值組,所合併出的結果在左邊的屬性值將會是空值(Null Value)。
(d)所表示的是在左、右兩邊關聯的某些(一個或多個)相對應的屬性值彼此無法「對應」的部份,但是在合併後的左、右兩邊屬性皆會有值存在。
(a)+(b)所表示的即是「左邊外部合併」。
(a)+(c)所表示的即是「右邊外部合併」。
(a)+(b)+(c)所表示的即是「完全外部合併」。
(a)+(d)所表示的是「卡氏積」或稱「交叉乘積」或「交叉合併」。
0 Responses