課程名稱:資料庫系統 授課老師:李春雄 博士 第 五 章 關聯式模式的資料運算 課程名稱:資料庫系統 授課老師:李春雄 博士 各位同學大家好,我是李春雄老師,本學期所開設的課程名稱為「資料結構」, 今天所要為各位介紹的是第一章「資料結構導論」
本章學習目標 1.讓讀者瞭解SQL語言與關聯式代數的關係。 2.讓讀者瞭解關聯式代數與關聯式計算的差異。 開始: 本章學習目標 有二項:
本章內容 5-1 關聯式模式的資料運算 5-2 關聯式代數 5-3 限制(Restrict) 5-4 投影(Project) 5-1 關聯式模式的資料運算 5-2 關聯式代數 5-3 限制(Restrict) 5-4 投影(Project) 5-5 聯集(Union) 5-6 卡氏積(Cartesian Product) 5-7 差集(Difference) 5-8 合併(Join) 5-9 交集(Intersection) 5-10 除法(Division) 5-11 非基本運算子的替代 5-12 外部合併(Outer Join) 1-1 認識資料與資訊的關係: 其中,「資料」轉換成「資訊」必須要經過一連串處理過程,而這一連串的處理過程就是透過「程式」來處理。 1-2 何謂資料結構? 「資料結構」(Data Structures)主要是探討如何將資料更有組織地存放到電腦記憶體中,以提昇程式之執行效率的一 門學問。 1-3 何謂演算法?演算法就是「解決問題的方法」 1-4 程式設計概念: 步驟1. 分析所要解決的問題 步驟2. 設計解題的步驟 步驟3. 編寫程式 步驟4. 上機測試、偵測錯誤 步驟5. 編寫程 式說明書 1-5 結構化程式設計 利用「由上而下」的技巧,將程式分解成許多個獨立功能的模組。並且每一個模組都是由三種結構所組成。分別為循序結構、選擇結構及重複結構。 1-6 演算法的效率評估 指用來計算某些演算法所撰寫的程式,在經過編譯之後,實際執行所需要的時間。
5-1. 關聯式模式的資料運算 基本上,關聯式模式的資料運算可分為二種分別為: 一、關聯式代數(Relational Algebra) 5-1. 關聯式模式的資料運算 基本上,關聯式模式的資料運算可分為二種分別為: 一、關聯式代數(Relational Algebra) 二、關聯式計算(Relational Calculus)
一、關聯式代數(Relational Algebra) 【定義】是一種較低階的、程序性的、規範性之抽象的查詢語言,它 是來描述如何產生查詢結果的步驟。我們可以想像成「演算 法」,亦即描述解決問題的步驟。 【運算子】基本上,關聯式代數包括一些運算子 1.聯集 2.交集 3.差集 4.乘積 5.選擇(限制) 6.投影 7.合併 8.除法 其關聯(Relation)運算之後的輸出仍為關聯(Relation)。
二、關聯式計算(Relational Calculus) 【定義】 是一種較高階的,非程序性的、問題導向的、描述性的查詢語言,它使用「邏輯方法」表示關聯模型。它是由E.F. Codd在1972年所定義的關聯式系統的查詢語言。 如果一種語言具有與關聯式計算一樣的功能時,則稱該語言具有 關聯完全性。例如:QUEL及SQL查詢語言具有關聯完全性。
「關聯式代數」與「關聯式計算」的比較 【註】SQL(Structured Query Language)是關聯式代數與關聯式計算 「關聯式代數」與「關聯式計算」的比較 關聯式代數 關聯式計算 為一程序式的查詢語言 為一非程序式查詢語言 必須明白地指出運算的順序 不須明白地指出運算的順序 如何(“How”)取得 取得什麼(“What”) 具有基本運算:聯集、交集等運算 沒有提供基本運算 可直接實作 透過關聯式代數來實作 具關聯完全性 強調如何取得資料的過程 強調取得什麼資料 【註】SQL(Structured Query Language)是關聯式代數與關聯式計算 兩者的綜合體。
SQL語言與關聯式代數的關係 當我們利用SQL指令來查詢時,資料庫管理系統(DBMS)的查詢處理模組(Query Processor)會將「SQL指令」轉換成「關聯式代數運算式」,其處理步驟。如下圖所示: 步驟1:使用者下所需的「SQL指令」 步驟2:資料庫管理系統會利用「查詢處理模組」將「SQL指令」 轉換成「關聯式代數運算式」。 步驟3:利用「關聯式代數」來實際執行 步驟4:查詢後「顯示結果」
5-2. 關聯式代數 關聯式資料庫的 SQL 語法是以「關聯式代數」作為它的理論基礎,而在「關聯式資料模型」中,根據E.F.Codd所提出的「關聯式代數」有 八種基本運算子。如下表所示: 運算子 意義 基本 σ π ∪ × - 限制(Restrict) 投影(Project) 聯集(Union) 卡氏積(Cartesian Product) 差集(Difference) 比較 > ≧ < ≦ = ≠ 大於 大於等於 小於 小於等於 等於 不等於 非基本 ∩ ÷ 合併(Join) 交集(Intersection) 除法(Division) 邏輯 ﹁ ^ v NO AND OR
5-2.1 關聯式代數的「基本運算子」 【定義】是指不能由其他「運算子」導出的運算子 【運算子種類】 5-2.1 關聯式代數的「基本運算子」 【定義】是指不能由其他「運算子」導出的運算子 【運算子種類】 ①限制(Restrict),代表符號:σ ②投影(Project) ,代表符號:π ③聯集(Union) ,代表符號:∪ ④卡氏積(Cartesian Product) ,代表符號:× ⑤差集(Difference) ,代表符號:─ 以上五種運算子所成的集合稱為「完整集合」(Complete set)。
5-2.2 關聯式代數的「非基本運算子」 【定義】是指可以由「基本運算子」導出的運算子。 【運算子種類】 ①合併(Join) ,代表符號: 5-2.2 關聯式代數的「非基本運算子」 【定義】是指可以由「基本運算子」導出的運算子。 【運算子種類】 ①合併(Join) ,代表符號: ②交集(Intersection) ,代表符號:∩ ③除法(Division) ,代表符號:÷
5-3 限制(Restrict) 【定義】 1.限制又稱為選擇操作(Select Operation) 2.「選擇運算子」含有兩個參數 (1)選取條件 (Predicate) P (2)關聯表名稱 R 3.從 R 中選出符合條件 P 的值組《下一頁詳細說明》
【例如】σ身高<170 AND 體重<60 (學生資料表) 3.從 R 中選出符合條件 P 的值組 是指在關聯 R 中選擇滿足條件P 的所有值組。 【代表符號】 σ(唸成sigma) 【關聯式代數】σP(R) 【概念圖】 從關聯表 R中選取符合條件 (Predicate) P的值組。其結果為原關聯表R記錄 的「水平」子集合。如下圖所示: 【例如】σ身高<170 AND 體重<60 (學生資料表) 則 (1)選取條件 (Predicate) P 身高<170 AND 體重<60 (2)關聯表名稱 R 學生資料表 σp(R) P
【實例1】 請利用限制(Restrict)來查詢學生資料表 Q1:請問σ體重>70(學生資料表)=? 【Q1解答】
【實例2】 請利用限制(Restrict)來查詢學生資料表 Q2:請利用關聯代數來表示 身高小於170公分及體重小於60公斤的學生記錄
【實例2】 請利用限制(Restrict)來查詢學生資料表 Q2:請利用關聯代數來表示 身高小於170公分及體重小於60公斤的學生記錄 【實例2】 請利用限制(Restrict)來查詢學生資料表 Q2:請利用關聯代數來表示 身高小於170公分及體重小於60公斤的學生記錄 【Q2解答】σ身高<170 AND 體重<60 (學生資料表)
分析 註1:σ身高<170 AND體重<60 (學生資料表)可以用別兩種方式表示 分析 註1:σ身高<170 AND體重<60 (學生資料表)可以用別兩種方式表示 (1)σ身高<170 (σ體重<60 (學生資料表)) (2)σ體重<60 (σ身高<170 (學生資料表)) 註2: 運算所產生的結果關聯,其值組的數目會少於或等於原有關聯的值組數目。
【隨堂練習1】 請利用限制(Restrict)來查詢學生資料表 Q1:請撰寫關聯式代數來查詢性別為「男」同學名單? 學號 姓名 性別 科系 【隨堂練習1】 請利用限制(Restrict)來查詢學生資料表 Q1:請撰寫關聯式代數來查詢性別為「男」同學名單? 學號 姓名 性別 科系 S0001 張三 男 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 女 企管系 S0005 李安
【隨堂練習1】 請利用限制(Restrict)來查詢學生資料表 Q1:請撰寫關聯式代數來查詢性別為「男」同學名單? 【Q1解答】 【隨堂練習1】 請利用限制(Restrict)來查詢學生資料表 Q1:請撰寫關聯式代數來查詢性別為「男」同學名單? 【Q1解答】 σ性別=‘男’(學生資料表) 學號 姓名 性別 科系 S0001 張三 男 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 女 企管系 S0005 李安
【隨堂練習2】 請利用限制(Restrict)來查詢學生資料表 Q2:請撰寫關聯式代數來查詢性別為「男」且科系為「資管系」同學名單? 學號 【隨堂練習2】 請利用限制(Restrict)來查詢學生資料表 Q2:請撰寫關聯式代數來查詢性別為「男」且科系為「資管系」同學名單? 學號 姓名 性別 科系 S0001 張三 男 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 女 企管系 S0005 李安
【隨堂練習2】 請利用限制(Restrict)來查詢學生資料表 Q2:請撰寫關聯式代數來查詢性別為「男」且科系為「資管系」同學名單? 【隨堂練習2】 請利用限制(Restrict)來查詢學生資料表 Q2:請撰寫關聯式代數來查詢性別為「男」且科系為「資管系」同學名單? 【Q2解答】 σ性別=‘男’and 科系=‘資管系’(學生資料表) 學號 姓名 性別 科系 S0001 張三 男 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 女 企管系 S0005 李安
5-4 投影(Project) 【定義】 是指從關聯R上的投影,亦即從關聯R中選擇出許多「欄位」後, 再重新組成一個新的關聯。 【代表符號】 π(唸成pai) 【關聯式代數】π A (R) ,其中:A 為 R 中的屬性欄位。 【概念圖】 從關聯表 R中選取想要的欄位。其結果為原關聯表R記錄的「垂直」子集合。如下圖所示: π欄位(R)
【實例1】 請利用投影(Project)來查詢學生資料表 請問π學號,身高,體重(學生資料表)=? 【解答】
【實例2】 請利用「關聯式代數」來撰寫下列的查詢 學生資料表 請找出「資管系」學生的學號、姓名? 【解答】有三種不同方法 【實例2】 請利用「關聯式代數」來撰寫下列的查詢 學生資料表 請找出「資管系」學生的學號、姓名? 【解答】有三種不同方法 第一種方法:π學號,姓名(σ科系=’ 資管系’(學生資料表)) 一般作法 第二種方法:資管系學生σ科系=’ 資管系’(學生資料表) 暫存表格作法 查詢結果π學號,姓名(資管系學生) 或:暫存學生 π學號,姓名(學生資料表) 查詢結果 σ科系=’ 資管系’(暫存學生) 學號 姓名 性別 科系 S0001 張三 男 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 女 企管系 S0005 李安
【實例2】 請利用「關聯式代數」來撰寫下列的查詢 學生資料表 請找出「資管系」學生的學號、姓名? 【解答】 【實例2】 請利用「關聯式代數」來撰寫下列的查詢 學生資料表 請找出「資管系」學生的學號、姓名? 【解答】 第三種方法:重新命名欄位作法(少用) 資管系學生σ科系=’ 資管系’(學生資料表) Result(stu,name)π學號,姓名(資管系學生) 至於以上三種表達方式,那一種較好,沒有定論。 一般認為只要能夠正確的寫出來,其表達方式一樣好。 學號 姓名 性別 科系 S0001 張三 男 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 女 企管系 S0005 李安
【分析】 π學號,姓名,性別,科系(σ科系=’ 資管系’(學生資料表)) 2、先投影,再選取 【分析】 在撰寫「關聯式代數」時,我們可以任意使用以下兩種不同順序: 1、先選取,再投影 π學號,姓名,性別,科系(σ科系=’ 資管系’(學生資料表)) 2、先投影,再選取 σ科系=’ 資管系’ (π學號,姓名,性別,科系(學生資料表)) 再投影 先選取 再選取 先投影
【隨堂練習】 Q1:π學號,姓名,性別(σ科系=’ 資管系’(學生資料表)) 【隨堂練習】 請判斷下列那一種「關聯式代數」是正確寫法,如果不正確時,請說明原因? Q1:π學號,姓名,性別(σ科系=’ 資管系’(學生資料表)) Q2:σ科系=’ 資管系’ (π學號,姓名,性別(學生資料表))
【隨堂練習】 Q1:π學號,姓名,性別(σ科系=’ 資管系’(學生資料表)) 【解答】正確 【隨堂練習】 請判斷下列那一種「關聯式代數」是正確寫法,如果不正確時,請說明原因? Q1:π學號,姓名,性別(σ科系=’ 資管系’(學生資料表)) 【解答】正確 Q2:σ科系=’ 資管系’ (π學號,姓名,性別(學生資料表)) 【解答】不正確 原因:先投影時,已經過濾掉「科系」欄位,因此,再執行選取時,已經沒有「科系」欄位,所以產生錯誤。 <注意:選取某一個欄位時,必須要能在投影後的關聯表R中找到,否則無法執行。
【隨堂練習】詳解 Q1:π學號,姓名,性別(σ科系=’ 資管系’(學生資料表)) 【解答】正確 【隨堂練習】詳解 請判斷下列那一種「關聯式代數」是正確寫法,如果不正確時,請說明原因? Q1:π學號,姓名,性別(σ科系=’ 資管系’(學生資料表)) 【解答】正確 學生資料表 學號 姓名 性別 科系 S0001 張三 男 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 女 企管系 S0005 李安 σ科系=’ 資管系’ 學號 姓名 性別 科系 S0001 張三 男 資管系 S0003 王五 學號 姓名 性別 科系 S0001 張三 男 資管系 S0003 王五 學號 姓名 性別 S0001 張三 男 S0003 王五 π學號,姓名,性別
【隨堂練習】詳解 Q2:σ科系=’ 資管系’ (π學號,姓名,性別(學生資料表)) 【解答】不正確 【隨堂練習】詳解 請判斷下列那一種「關聯式代數」是正確寫法,如果不正確時,請說明原因? Q2:σ科系=’ 資管系’ (π學號,姓名,性別(學生資料表)) 【解答】不正確 學生資料表 學號 姓名 性別 科系 S0001 張三 男 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 女 企管系 S0005 李安 π學號,姓名,性別 學號 姓名 性別 S0001 張三 男 S0002 李四 S0003 王五 S0004 李崴 女 S0005 李安 學號 姓名 性別 S0001 張三 男 S0002 李四 S0003 王五 S0004 李崴 女 S0005 李安 σ科系=’ 資管系’ 產生錯誤,選取某一個欄位時,必須要能在投影後的關聯表R中找到,否則無法執行。
5-5 聯集(Union) 【定義】 是指關聯表R與關聯表S作「聯集」時,則會重新組合成一個新的關聯 表,而新的關聯表中的記錄為原來兩關聯表的所有記錄,若有重複的 記錄,則只會出現一次。 【關聯式代數】 R∪S 【概念圖】 R S R ∪ S 重複的記錄
【概念分析】 重複的記錄(只會出現一次) 重複的記錄(只會出現一次)
【實例】 請利用「聯集(Union)」來查詢學生資料表 請問R∪S=? 【解答】 重複的記錄 只會出現一次
【隨堂練習】 若A={1,2,3,4},B={3,4,5,6},則A∪B 請問A∪B=?
【隨堂練習】 若A={1,2,3,4},B={3,4,5,6},則A∪B 請問A∪B=? 【解答】 A∪B={1,2,3,4,5,6}
5-6 卡氏積(Cartesian Product) 【定義】是指將兩關聯表R與S的記錄利用集合運算中的乘積運算形成 新的關聯表。 【作法】 1. 關聯R和關聯S分別為n欄和m欄,其笛卡爾乘積是一個(n+m)欄 的值組的集合,其前n欄是關聯R的,後m欄是關聯S的。 2.若關聯R有X個值組,關聯S有Y個值組,則關聯R和關聯S的廣義笛 卡爾乘積有X*Y個值組。 【關聯式代數】 R×S
【概念分析】 (1)假如關聯R中n=3(欄),關聯S中m=3(欄),在笛卡爾乘積之後,變成 一個(n+m)欄,所以R×S共有6欄。 【概念分析】 (1)假如關聯R中n=3(欄),關聯S中m=3(欄),在笛卡爾乘積之後,變成 一個(n+m)欄,所以R×S共有6欄。 (2)假如關聯R中X=3個值組,關聯S中Y=3個值組,則關聯R和關聯S在 笛卡爾乘積有X*Y個值組,所以R×S共有9筆值組。 n=3(欄) n+m =3+3=6(欄) X=3筆 R×S= m=3(欄) Y=3筆 X*Y =3*3=9筆
【實例】 請利用卡氏積(Cartesian Product)來查詢學生資料表 請問R×S=? 【解答】 【實例】 請利用卡氏積(Cartesian Product)來查詢學生資料表 請問R×S=? 【解答】 說明:若關聯R有X筆值組(記錄),關聯S有Y筆值組(記錄),則 R × S共有X*Y筆記錄。
5-7 差集(Difference) 【定義】 是指關聯 R差集關聯 S之後的結果,則為關聯R減掉RS兩關聯共同的 值組。 註:R─S 代表:屬於R,但不屬於S S─R 代表:屬於S,但不屬於R S R-S R∩S S-R
【概念分析】 R─S 代表:屬於R,但不屬於S,亦即R-R∩S R∩S R─S = R-R∩S=3筆-2筆=1筆 3筆 R S R-S 【概念分析】 R─S 代表:屬於R,但不屬於S,亦即R-R∩S R∩S R─S = R-R∩S=3筆-2筆=1筆 3筆 R S R-S R∩S S-R
【實例】 請利用差集(Difference)來查詢學生資料表 請問R─S=? 【解答】R─S = R-R∩S=3筆-1筆=2筆 【實例】 請利用差集(Difference)來查詢學生資料表 請問R─S=? 【解答】R─S = R-R∩S=3筆-1筆=2筆 1筆相同(亦即R∩S) R S R-S R∩S S-R
【隨堂練習1】 若A={1,2,3,4},B={3,4,5,6},則A─B 請問A ─ B=?
【隨堂練習1】 若A={1,2,3,4},B={3,4,5,6},則A─B 請問A ─ B=? 【解答】 A─B={1,2}
【隨堂練習2】 若A={1,2,3,4},B={3,4,5,6},則B─A 請問B ─ A=?
【隨堂練習2】 若A={1,2,3,4},B={3,4,5,6},則B─A 請問B ─ A=? 【解答】 B─A={5,6}
5-8 合併(Join) 【定義】 是指將兩關聯表R與S依合併條件合併成一個新的關聯表R3 ,假設P 為合併條件,以R∞pS表示此合併運算。 【作法】從兩個關聯的「卡氏積」中選取屬性間滿足一定條件的值組。 【關聯式代數】R p S
合併(Join)有三種型態 (一) 自然合併(Natural Join);又稱為內部合併(Inner Join) (二) θ-合併(Theta Join) (三) 對等合併(Equi-Join):是θ-合併的特例。
5-8.1 自然合併(Natural Join) 【定義】 自然合併(Natural Join)又稱為內部合併(Inner Join),它必須在左右兩邊的關聯中找到對應值組才行,而Outer join則無此規定。 一般的結合(Join)都是屬於此種方法。 【概念分析】 【作法】透過SELECT指令FROM部分的Natural Join。 【例如】 From A Natural Join B 重複欄位, 只會出現一次 R p S
【實例】 請問 學生( 學生.班級代號=班級.班級代號)班級=? 【解答】 註:事實上對自然合併以(學生 班級)來代表即可,不必列出條件。
5-8.2 θ-合併(Theta Join) 【定義】 以「等於」以外的條件為基礎來合併兩個關聯的運算。 【語法】(A×B) WHERE A.X θ B.Y 其中A,B為無共同屬性的關聯,A具有屬性X,而B具有屬性Y。 【 θ 合併的運算子】=,<,≦,>,≧,≠ 【注意】相同名稱的欄位會同時出現在運算結果的表格中。 亦即重複欄位,會出現兩次
【實例】 若學生的選修,必須是學生年級高於或等於課程開課年級。亦即不能低修。請輸出所有學生姓名及其所能選修的課程名稱。 [解答] 【實例】 若學生的選修,必須是學生年級高於或等於課程開課年級。亦即不能低修。請輸出所有學生姓名及其所能選修的課程名稱。 [解答] π學生.姓名,課程.課程名稱(σ年級>=開課年級(學生×課程))
5-8.3 對等合併(Equi-Join) 【定義】 若θ為「等於比較」的狀況時,θ-Join稱為對等合併(Equi-Join)。 目前都是Equi-Join為主(因為Join放在Where中)Equi-Join。 在本書中,都是以此合併為主。 【作法】 它是從關聯 R 與 S 的卡氏積中,分別選取關聯 R 的C屬性值等於與 關聯 S 的C屬性值,即等位合併為: R R.c=S.c S 【對應SQL指令】 透過SELECT指令WHERE部分的等式。 例如:From R ,S Where (R.c=S.c)
【概念分析】 重複欄位 R p S
【實例1】 請問學生Equi-Join (學生.班級代號=班級.班級代號)班級=? 【解答】
【實例2】 請利用關聯式代數來撰寫下列的查詢 請找出所有學生的全部資訊? 【解答】 第一種方法: 步驟①:利用卡氏積 學生資訊(學生資料表×系別資料表)
步驟②:利用合併 Resultσ 學生資料表.系碼=系別資料表.系碼(學生資訊) 第二種方法 Result (學生資料表 學生資料表.系碼=系別資料表.系碼系別資料表) 利用Equi-Join(重複欄位,會出現兩次) 合併後的結果
【Join的比較】 Join的比較 θ-Join 條件式中不限等號(重複欄位,會出現兩次) Equi-Join 條件式中只能用等號(重複欄位,會出現兩次) Outer Join 沒有匹配的資料也要選入 Natural Join 要有匹配的資料才能被選入(重複欄位,只出現一次)
5-9 交集(Intersection) 【定義】 是指關聯 R 與關聯 S作「交集」時,則將原來在兩個關聯式中都有 出現的值組(記錄)組合在一起成為新的關聯式。 【關聯式代數】 R ∩ S代表既屬於R又屬於S的值組組成。 關聯的「交集」可以用「差集」來表示,即R∩S = R – (R - S) 【概念圖】 R S R S R-S R∩S R∩S 共同出現的記錄
【概念分析】 R∩S R∩S = R – (R – S)=3筆-1筆=2筆 2筆 R S R-S R∩S
【實例】 請利用交集(Intersection)來查詢學生資料表 請問R ∩ S=? 【解答】 1筆共同出現的記錄 (亦即R∩S)
【隨堂練習】 若A={1,2,3,4},B={3,4,5,6},則A ∩B 請問A ∩B =?
【隨堂練習】 若A={1,2,3,4},B={3,4,5,6},則A ∩B 請問A ∩B =? 【解答】 A ∩B ={3,4}
5-10 除法(Division) 【定義】 此種運算如同數學上的除法一般,有二個運算元:第一個關聯表R 其中「被除表格」的屬性必須比「除表格」中的任何屬性中的值域都 要與「被除表格」中的某屬性之值域相符合。 【關聯式代數】 R ÷ S 【概念圖】 關聯 R 與關聯 S作「除法」運算時,只作用在兩個關聯中相同的部份。
【簡易作法】 關聯R「除以」關聯S時,則分兩個步驟來處理 步驟1: 檢查關聯R中的每一列資料,若有包含關聯S中的某一列時,則將 該列資料取出
【實例分析】 假設現在有關聯R與關聯S,如下圖所示: 現在欲作 R ÷ S時,則其執行過程為何? 【解答】 該列資料取出 關聯R 關聯S 關聯R 關聯S 包含 取出
步驟2: 將步驟1取出資料列,再刪掉S關聯之資料行 刪除後的結果 (重複時,只出現一次)
【數學正統作法】 利用1個卡氏積、2個差集及3個投影運算來實現。
【實例】 請利用除法(Division)來查詢學生資料表 請問A÷B=? 【解答】 步驟一:π X(A)=π學生(學生專長表)
步驟二:πX(A) ×B =π學生(學生專長表) ×助教所需資訊技能表
步驟三:πX(A)×B─A =π學生(學生專長表) ×助教所需資訊技能表 ─ 學生專長表 π學生(學生專長表) ×助教所需資訊技能表 ─ 學生專長表 ─
步驟四:πX[πX(A)×B─A ]= π學生[π學生(學生專長表) × 助教所需資訊技能表 ─學生專長表] π學生[步驟三]= 步驟三 後的結果如上
πX(A)-πX[πX(A)×B─A] =π學生(學生專長表)-[π學生(學生專長表) ×助教 所需資訊技能表 ─學生專長表] 步驟五: πX(A)-πX[πX(A)×B─A] =π學生(學生專長表)-[π學生(學生專長表) ×助教 所需資訊技能表 ─學生專長表] 將「學生專長表」 與 「助教所需資訊技能表」做 Divide 運算的結果如下: πX(A) ─ [步驟四後的結果] = 姓名 王五 ─
5-11 非基本運算子的替代 (由基本運算子導出) 一、合併(Join) ,代表符號: p 5-11 非基本運算子的替代 (由基本運算子導出) 一、合併(Join) ,代表符號: p 由乘積衍生而得。將其視為乘積運算後,再依合併條件P來去除不符合條件的記錄。(P:指A與B的共同屬性內含值時) 【公式】 [註]一個合併的運算,可由一個乘積和一個選擇(限制)運算來替代。
二、交集(Intersection) ,代表符號:∩ 由差集(Difference)衍生而得。 【公式】 A∩B=A-(A-B)=B-(B-A) 若A與B是型態相容的,則A∩B=A Join B [註] 由2個差集來替代
三、除法(Division) ,代表符號:÷ 由1個卡氏積、2個差集及3個投影運算來實現。
5-12 外部合併(Outer Join) 【定義】 當在進行合併(Join)時不管記錄是否符合條件,都會被列出其中一個資料表的所有記錄時,則稱為「外部合併」。因此,其合併結果中會保留第一個關聯(Left Outer-Join)或保留第二個關聯(Right Outer-Join)或保留兩個關聯(Full Outer-Join)中的所有值組。
【作法】 進行合併(Join)時,如果不符合條件的記錄就會被預設為NULL值。即左右兩邊的關聯表,不一定要有對應值組。 【使用時機】 應用在異質性分散式資料庫上的整合運算,其好處是不會遺漏資訊。 【例如】 情況一:使用內部合併 學校的選課作業中,如果只利用「內部合併」時,則只有已選課的同學會收到一張選課清單(學生表與課程表「內部合併」的結果。但如果尚未選課者,則連一張個人資料都沒有。 情況二:使用外部合併 學校的選課作業中,如果使用「外部合併」時,則不管是否已選課都可以收到一張選課清單。只是尚未選課者,會收到一個有個人資料而未選課的清單。
1.外部合併(Outer Join)<續> 【分類】 基本上,外部合併可分為以下三種合併 (1)左外部合併(Left Outer Join,以 表示) (2)右外部合併(Right Outer Join ,以 表示) (3)全外部合併(Full Outer Join ,以 表示)
(1)左外部結合(Left Outer Join) 【定義】 是指以左邊的關聯表為主,右邊的關聯表為輔,因此,左右兩個關聯表在運算時,則會保留左邊關聯表中的所有值組(Tuples)。找不到相匹配的值組時,必須填入NULL(空值)。 【舉例】列出全班同學的選課記錄(以學生表為主,課程表為輔) 學生表
【實例】 請問學生表 課程表=? 【解答】
(2)右外部結合(Right Outer Join) 【定義】 是指以右邊的關聯表為主,左邊的關聯表為輔,因此,左右兩個關聯表在運算時,則會保留右邊關聯表中的所有值組(Tuples)。找不到相匹配的值組時,必須填入NULL(空值)。 【舉例】列出本學期開課科目被同學選課情況 (以學生表為輔,課程表為主) 課程表
【實例】 請問學生 班級=? 【解答】
(3)全外部結合(Full Outer Join) 【定義】 是指以左、右邊的關聯表為主,因此,左右兩個關聯表在運算時,則會進行左、右邊關聯表中的聯集。找不到相匹配的值組時,必須填入NULL(空值)。 【舉例】請同時列出全班同學的選課記錄,及本學期開課科目被同學選課情況。
【實例】 請問學生 班級=? 【解答】