Presentation is loading. Please wait.

Presentation is loading. Please wait.

課程名稱:資料庫系統 授課老師:李春雄 博士

Similar presentations


Presentation on theme: "課程名稱:資料庫系統 授課老師:李春雄 博士"— Presentation transcript:

1 課程名稱:資料庫系統 授課老師:李春雄 博士
第 五 章 關聯式模式的資料運算 課程名稱:資料庫系統 授課老師:李春雄 博士 各位同學大家好,我是李春雄老師,本學期所開設的課程名稱為「資料結構」, 今天所要為各位介紹的是第一章「資料結構導論」

2 本章學習目標 1.讓讀者瞭解SQL語言與關聯式代數的關係。 2.讓讀者瞭解關聯式代數與關聯式計算的差異。 開始: 本章學習目標 有二項:

3 本章內容 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 演算法的效率評估 指用來計算某些演算法所撰寫的程式,在經過編譯之後,實際執行所需要的時間。

4 5-1. 關聯式模式的資料運算 基本上,關聯式模式的資料運算可分為二種分別為: 一、關聯式代數(Relational Algebra)
5-1. 關聯式模式的資料運算  基本上,關聯式模式的資料運算可分為二種分別為: 一、關聯式代數(Relational Algebra) 二、關聯式計算(Relational Calculus)

5 一、關聯式代數(Relational Algebra)
【定義】是一種較低階的、程序性的、規範性之抽象的查詢語言,它 是來描述如何產生查詢結果的步驟。我們可以想像成「演算 法」,亦即描述解決問題的步驟。 【運算子】基本上,關聯式代數包括一些運算子 1.聯集 2.交集 3.差集 4.乘積 5.選擇(限制) 6.投影 7.合併 8.除法 其關聯(Relation)運算之後的輸出仍為關聯(Relation)。

6 二、關聯式計算(Relational Calculus)
【定義】 是一種較高階的,非程序性的、問題導向的、描述性的查詢語言,它使用「邏輯方法」表示關聯模型。它是由E.F. Codd在1972年所定義的關聯式系統的查詢語言。 如果一種語言具有與關聯式計算一樣的功能時,則稱該語言具有 關聯完全性。例如:QUEL及SQL查詢語言具有關聯完全性。

7 「關聯式代數」與「關聯式計算」的比較 【註】SQL(Structured Query Language)是關聯式代數與關聯式計算
「關聯式代數」與「關聯式計算」的比較  關聯式代數 關聯式計算 為一程序式的查詢語言 為一非程序式查詢語言 必須明白地指出運算的順序 不須明白地指出運算的順序 如何(“How”)取得 取得什麼(“What”) 具有基本運算:聯集、交集等運算 沒有提供基本運算 可直接實作 透過關聯式代數來實作 具關聯完全性 強調如何取得資料的過程 強調取得什麼資料 【註】SQL(Structured Query Language)是關聯式代數與關聯式計算 兩者的綜合體。

8 SQL語言與關聯式代數的關係  當我們利用SQL指令來查詢時,資料庫管理系統(DBMS)的查詢處理模組(Query Processor)會將「SQL指令」轉換成「關聯式代數運算式」,其處理步驟。如下圖所示: 步驟1:使用者下所需的「SQL指令」 步驟2:資料庫管理系統會利用「查詢處理模組」將「SQL指令」 轉換成「關聯式代數運算式」。 步驟3:利用「關聯式代數」來實際執行 步驟4:查詢後「顯示結果」

9 5-2. 關聯式代數  關聯式資料庫的 SQL 語法是以「關聯式代數」作為它的理論基礎,而在「關聯式資料模型」中,根據E.F.Codd所提出的「關聯式代數」有 八種基本運算子。如下表所示: 運算子 意義 基本 σ π × 限制(Restrict) 投影(Project) 聯集(Union) 卡氏積(Cartesian Product) 差集(Difference) 比較 大於 大於等於 小於 小於等於 等於 不等於 非基本 ÷ 合併(Join) 交集(Intersection) 除法(Division) 邏輯 ^ v NO AND OR

10 5-2.1 關聯式代數的「基本運算子」 【定義】是指不能由其他「運算子」導出的運算子 【運算子種類】
關聯式代數的「基本運算子」 【定義】是指不能由其他「運算子」導出的運算子 【運算子種類】 ①限制(Restrict),代表符號:σ ②投影(Project) ,代表符號:π ③聯集(Union) ,代表符號:∪ ④卡氏積(Cartesian Product) ,代表符號:× ⑤差集(Difference) ,代表符號:─ 以上五種運算子所成的集合稱為「完整集合」(Complete set)。

11 5-2.2 關聯式代數的「非基本運算子」 【定義】是指可以由「基本運算子」導出的運算子。 【運算子種類】 ①合併(Join) ,代表符號:
關聯式代數的「非基本運算子」  【定義】是指可以由「基本運算子」導出的運算子。 【運算子種類】 ①合併(Join) ,代表符號: ②交集(Intersection) ,代表符號:∩ ③除法(Division) ,代表符號:÷

12 5-3 限制(Restrict) 【定義】 1.限制又稱為選擇操作(Select Operation) 2.「選擇運算子」含有兩個參數
(1)選取條件 (Predicate) P (2)關聯表名稱 R 3.從 R 中選出符合條件 P 的值組《下一頁詳細說明》

13 【例如】σ身高<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

14 【實例1】  請利用限制(Restrict)來查詢學生資料表 Q1:請問σ體重>70(學生資料表)=? 【Q1解答】

15 【實例2】  請利用限制(Restrict)來查詢學生資料表 Q2:請利用關聯代數來表示 身高小於170公分及體重小於60公斤的學生記錄

16 【實例2】 請利用限制(Restrict)來查詢學生資料表 Q2:請利用關聯代數來表示 身高小於170公分及體重小於60公斤的學生記錄
【實例2】  請利用限制(Restrict)來查詢學生資料表 Q2:請利用關聯代數來表示 身高小於170公分及體重小於60公斤的學生記錄 【Q2解答】σ身高<170 AND 體重<60 (學生資料表)

17 分析 註1:σ身高<170 AND體重<60 (學生資料表)可以用別兩種方式表示
分析  註1:σ身高<170 AND體重<60 (學生資料表)可以用別兩種方式表示 (1)σ身高<170 (σ體重<60 (學生資料表)) (2)σ體重<60 (σ身高<170 (學生資料表)) 註2: 運算所產生的結果關聯,其值組的數目會少於或等於原有關聯的值組數目。

18 【隨堂練習1】 請利用限制(Restrict)來查詢學生資料表 Q1:請撰寫關聯式代數來查詢性別為「男」同學名單? 學號 姓名 性別 科系
【隨堂練習1】  請利用限制(Restrict)來查詢學生資料表 Q1:請撰寫關聯式代數來查詢性別為「男」同學名單? 學號 姓名 性別 科系 S0001 張三 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 企管系 S0005 李安

19 【隨堂練習1】 請利用限制(Restrict)來查詢學生資料表 Q1:請撰寫關聯式代數來查詢性別為「男」同學名單? 【Q1解答】
【隨堂練習1】  請利用限制(Restrict)來查詢學生資料表 Q1:請撰寫關聯式代數來查詢性別為「男」同學名單? 【Q1解答】 σ性別=‘男’(學生資料表) 學號 姓名 性別 科系 S0001 張三 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 企管系 S0005 李安

20 【隨堂練習2】 請利用限制(Restrict)來查詢學生資料表 Q2:請撰寫關聯式代數來查詢性別為「男」且科系為「資管系」同學名單? 學號
【隨堂練習2】  請利用限制(Restrict)來查詢學生資料表 Q2:請撰寫關聯式代數來查詢性別為「男」且科系為「資管系」同學名單? 學號 姓名 性別 科系 S0001 張三 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 企管系 S0005 李安

21 【隨堂練習2】 請利用限制(Restrict)來查詢學生資料表 Q2:請撰寫關聯式代數來查詢性別為「男」且科系為「資管系」同學名單?
【隨堂練習2】  請利用限制(Restrict)來查詢學生資料表 Q2:請撰寫關聯式代數來查詢性別為「男」且科系為「資管系」同學名單? 【Q2解答】 σ性別=‘男’and 科系=‘資管系’(學生資料表) 學號 姓名 性別 科系 S0001 張三 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 企管系 S0005 李安

22 5-4 投影(Project) 【定義】 是指從關聯R上的投影,亦即從關聯R中選擇出許多「欄位」後, 再重新組成一個新的關聯。
【代表符號】 π(唸成pai) 【關聯式代數】π A (R) ,其中:A 為 R 中的屬性欄位。 【概念圖】 從關聯表 R中選取想要的欄位。其結果為原關聯表R記錄的「垂直」子集合。如下圖所示: π欄位(R)

23 【實例1】  請利用投影(Project)來查詢學生資料表 請問π學號,身高,體重(學生資料表)=? 【解答】

24 【實例2】 請利用「關聯式代數」來撰寫下列的查詢 學生資料表 請找出「資管系」學生的學號、姓名? 【解答】有三種不同方法
【實例2】  請利用「關聯式代數」來撰寫下列的查詢 學生資料表 請找出「資管系」學生的學號、姓名? 【解答】有三種不同方法 第一種方法:π學號,姓名(σ科系=’ 資管系’(學生資料表)) 一般作法 第二種方法:資管系學生σ科系=’ 資管系’(學生資料表)  暫存表格作法 查詢結果π學號,姓名(資管系學生)      或:暫存學生 π學號,姓名(學生資料表)     查詢結果 σ科系=’ 資管系’(暫存學生) 學號 姓名 性別 科系 S0001 張三 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 企管系 S0005 李安

25 【實例2】 請利用「關聯式代數」來撰寫下列的查詢 學生資料表 請找出「資管系」學生的學號、姓名? 【解答】
【實例2】  請利用「關聯式代數」來撰寫下列的查詢 學生資料表 請找出「資管系」學生的學號、姓名? 【解答】 第三種方法:重新命名欄位作法(少用)  資管系學生σ科系=’ 資管系’(學生資料表) Result(stu,name)π學號,姓名(資管系學生) 至於以上三種表達方式,那一種較好,沒有定論。 一般認為只要能夠正確的寫出來,其表達方式一樣好。 學號 姓名 性別 科系 S0001 張三 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 企管系 S0005 李安

26 【分析】 π學號,姓名,性別,科系(σ科系=’ 資管系’(學生資料表)) 2、先投影,再選取
【分析】  在撰寫「關聯式代數」時,我們可以任意使用以下兩種不同順序: 1、先選取,再投影 π學號,姓名,性別,科系(σ科系=’ 資管系’(學生資料表)) 2、先投影,再選取   σ科系=’ 資管系’ (π學號,姓名,性別,科系(學生資料表)) 再投影 先選取 再選取 先投影

27 【隨堂練習】 Q1:π學號,姓名,性別(σ科系=’ 資管系’(學生資料表))
【隨堂練習】  請判斷下列那一種「關聯式代數」是正確寫法,如果不正確時,請說明原因? Q1:π學號,姓名,性別(σ科系=’ 資管系’(學生資料表)) Q2:σ科系=’ 資管系’ (π學號,姓名,性別(學生資料表))

28 【隨堂練習】 Q1:π學號,姓名,性別(σ科系=’ 資管系’(學生資料表)) 【解答】正確
【隨堂練習】  請判斷下列那一種「關聯式代數」是正確寫法,如果不正確時,請說明原因? Q1:π學號,姓名,性別(σ科系=’ 資管系’(學生資料表)) 【解答】正確 Q2:σ科系=’ 資管系’ (π學號,姓名,性別(學生資料表)) 【解答】不正確 原因:先投影時,已經過濾掉「科系」欄位,因此,再執行選取時,已經沒有「科系」欄位,所以產生錯誤。 <注意:選取某一個欄位時,必須要能在投影後的關聯表R中找到,否則無法執行。

29 【隨堂練習】詳解 Q1:π學號,姓名,性別(σ科系=’ 資管系’(學生資料表)) 【解答】正確
【隨堂練習】詳解  請判斷下列那一種「關聯式代數」是正確寫法,如果不正確時,請說明原因? Q1:π學號,姓名,性別(σ科系=’ 資管系’(學生資料表)) 【解答】正確 學生資料表 學號 姓名 性別 科系 S0001 張三 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 企管系 S0005 李安 σ科系=’ 資管系’ 學號 姓名 性別 科系 S0001 張三 資管系 S0003 王五 學號 姓名 性別 科系 S0001 張三 資管系 S0003 王五 學號 姓名 性別 S0001 張三 S0003 王五 π學號,姓名,性別

30 【隨堂練習】詳解 Q2:σ科系=’ 資管系’ (π學號,姓名,性別(學生資料表)) 【解答】不正確
【隨堂練習】詳解  請判斷下列那一種「關聯式代數」是正確寫法,如果不正確時,請說明原因? Q2:σ科系=’ 資管系’ (π學號,姓名,性別(學生資料表)) 【解答】不正確 學生資料表 學號 姓名 性別 科系 S0001 張三 資管系 S0002 李四 資工系 S0003 王五 S0004 李崴 企管系 S0005 李安 π學號,姓名,性別 學號 姓名 性別 S0001 張三 S0002 李四 S0003 王五 S0004 李崴 S0005 李安 學號 姓名 性別 S0001 張三 S0002 李四 S0003 王五 S0004 李崴 S0005 李安 σ科系=’ 資管系’ 產生錯誤,選取某一個欄位時,必須要能在投影後的關聯表R中找到,否則無法執行。

31 5-5 聯集(Union) 【定義】 是指關聯表R與關聯表S作「聯集」時,則會重新組合成一個新的關聯
表,而新的關聯表中的記錄為原來兩關聯表的所有記錄,若有重複的 記錄,則只會出現一次。 【關聯式代數】 R∪S 【概念圖】 R S R ∪ S 重複的記錄

32 【概念分析】  重複的記錄(只會出現一次) 重複的記錄(只會出現一次)

33 【實例】  請利用「聯集(Union)」來查詢學生資料表 請問R∪S=? 【解答】 重複的記錄 只會出現一次

34 【隨堂練習】  若A={1,2,3,4},B={3,4,5,6},則A∪B 請問A∪B=?

35 【隨堂練習】  若A={1,2,3,4},B={3,4,5,6},則A∪B 請問A∪B=? 【解答】 A∪B={1,2,3,4,5,6}

36 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

37 【概念分析】 (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筆

38 【實例】 請利用卡氏積(Cartesian Product)來查詢學生資料表 請問R×S=? 【解答】
【實例】  請利用卡氏積(Cartesian Product)來查詢學生資料表 請問R×S=?  【解答】 說明:若關聯R有X筆值組(記錄),關聯S有Y筆值組(記錄),則 R × S共有X*Y筆記錄。

39 5-7 差集(Difference) 【定義】 是指關聯 R差集關聯 S之後的結果,則為關聯R減掉RS兩關聯共同的 值組。
註:R─S 代表:屬於R,但不屬於S S─R 代表:屬於S,但不屬於R S R-S R∩S S-R

40 【概念分析】 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

41 【實例】 請利用差集(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

42 【隨堂練習1】  若A={1,2,3,4},B={3,4,5,6},則A─B 請問A ─ B=?

43 【隨堂練習1】  若A={1,2,3,4},B={3,4,5,6},則A─B 請問A ─ B=? 【解答】 A─B={1,2}

44 【隨堂練習2】  若A={1,2,3,4},B={3,4,5,6},則B─A 請問B ─ A=?

45 【隨堂練習2】  若A={1,2,3,4},B={3,4,5,6},則B─A 請問B ─ A=? 【解答】 B─A={5,6}

46 5-8 合併(Join) 【定義】 是指將兩關聯表R與S依合併條件合併成一個新的關聯表R3 ,假設P 為合併條件,以R∞pS表示此合併運算。
【作法】從兩個關聯的「卡氏積」中選取屬性間滿足一定條件的值組。 【關聯式代數】R p S

47 合併(Join)有三種型態 (一) 自然合併(Natural Join);又稱為內部合併(Inner Join)
(二) θ-合併(Theta Join) (三) 對等合併(Equi-Join):是θ-合併的特例。

48 5-8.1 自然合併(Natural Join) 【定義】
自然合併(Natural Join)又稱為內部合併(Inner Join),它必須在左右兩邊的關聯中找到對應值組才行,而Outer join則無此規定。 一般的結合(Join)都是屬於此種方法。 【概念分析】 【作法】透過SELECT指令FROM部分的Natural Join。 【例如】 From A Natural Join B 重複欄位, 只會出現一次 R p S

49 【實例】  請問 學生( 學生.班級代號=班級.班級代號)班級=? 【解答】 註:事實上對自然合併以(學生 班級)來代表即可,不必列出條件。

50 5-8.2 θ-合併(Theta Join) 【定義】 以「等於」以外的條件為基礎來合併兩個關聯的運算。
【語法】(A×B) WHERE A.X θ B.Y 其中A,B為無共同屬性的關聯,A具有屬性X,而B具有屬性Y。 【 θ 合併的運算子】=,<,≦,>,≧,≠ 【注意】相同名稱的欄位會同時出現在運算結果的表格中。  亦即重複欄位,會出現兩次

51 【實例】 若學生的選修,必須是學生年級高於或等於課程開課年級。亦即不能低修。請輸出所有學生姓名及其所能選修的課程名稱。 [解答]
【實例】  若學生的選修,必須是學生年級高於或等於課程開課年級。亦即不能低修。請輸出所有學生姓名及其所能選修的課程名稱。 [解答] π學生.姓名,課程.課程名稱(σ年級>=開課年級(學生×課程))

52 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)

53 【概念分析】  重複欄位 R p S

54 【實例1】  請問學生Equi-Join (學生.班級代號=班級.班級代號)班級=? 【解答】

55 【實例2】 請利用關聯式代數來撰寫下列的查詢 請找出所有學生的全部資訊? 【解答】 第一種方法:
步驟①:利用卡氏積 學生資訊(學生資料表×系別資料表)

56 步驟②:利用合併 Resultσ 學生資料表.系碼=系別資料表.系碼(學生資訊)
第二種方法 Result (學生資料表 學生資料表.系碼=系別資料表.系碼系別資料表) 利用Equi-Join(重複欄位,會出現兩次) 合併後的結果

57 【Join的比較】 Join的比較 θ-Join 條件式中不限等號(重複欄位,會出現兩次) Equi-Join
條件式中只能用等號(重複欄位,會出現兩次) Outer Join 沒有匹配的資料也要選入 Natural Join 要有匹配的資料才能被選入(重複欄位,只出現一次)

58 5-9 交集(Intersection) 【定義】 是指關聯 R 與關聯 S作「交集」時,則將原來在兩個關聯式中都有
出現的值組(記錄)組合在一起成為新的關聯式。 【關聯式代數】 R ∩ S代表既屬於R又屬於S的值組組成。 關聯的「交集」可以用「差集」來表示,即R∩S = R – (R - S) 【概念圖】 R S R S R-S R∩S R∩S 共同出現的記錄

59 【概念分析】  R∩S R∩S = R – (R – S)=3筆-1筆=2筆 2筆 R S R-S R∩S

60 【實例】  請利用交集(Intersection)來查詢學生資料表 請問R ∩ S=? 【解答】 1筆共同出現的記錄 (亦即R∩S)

61 【隨堂練習】  若A={1,2,3,4},B={3,4,5,6},則A ∩B 請問A ∩B =?

62 【隨堂練習】  若A={1,2,3,4},B={3,4,5,6},則A ∩B 請問A ∩B =? 【解答】 A ∩B ={3,4}

63 5-10 除法(Division) 【定義】 此種運算如同數學上的除法一般,有二個運算元:第一個關聯表R
其中「被除表格」的屬性必須比「除表格」中的任何屬性中的值域都 要與「被除表格」中的某屬性之值域相符合。 【關聯式代數】 R ÷ S 【概念圖】 關聯 R 與關聯 S作「除法」運算時,只作用在兩個關聯中相同的部份。

64 【簡易作法】 關聯R「除以」關聯S時,則分兩個步驟來處理 步驟1: 檢查關聯R中的每一列資料,若有包含關聯S中的某一列時,則將 該列資料取出

65 【實例分析】 假設現在有關聯R與關聯S,如下圖所示: 現在欲作 R ÷ S時,則其執行過程為何? 【解答】
該列資料取出 關聯R 關聯S 關聯R 關聯S 包含 取出

66 步驟2: 將步驟1取出資料列,再刪掉S關聯之資料行
刪除後的結果 (重複時,只出現一次)

67 【數學正統作法】   利用1個卡氏積、2個差集及3個投影運算來實現。

68 【實例】  請利用除法(Division)來查詢學生資料表 請問A÷B=? 【解答】 步驟一:π X(A)=π學生(學生專長表)

69 步驟二:πX(A) ×B =π學生(學生專長表) ×助教所需資訊技能表

70 步驟三:πX(A)×B─A =π學生(學生專長表) ×助教所需資訊技能表 ─ 學生專長表
π學生(學生專長表) ×助教所需資訊技能表 ─ 學生專長表

71 步驟四:πX[πX(A)×B─A ]= π學生[π學生(學生專長表) × 助教所需資訊技能表 ─學生專長表]
π學生[步驟三]= 步驟三 後的結果如上

72 πX(A)-πX[πX(A)×B─A] =π學生(學生專長表)-[π學生(學生專長表) ×助教 所需資訊技能表 ─學生專長表]
步驟五: πX(A)-πX[πX(A)×B─A] =π學生(學生專長表)-[π學生(學生專長表) ×助教 所需資訊技能表 ─學生專長表] 將「學生專長表」 與 「助教所需資訊技能表」做 Divide 運算的結果如下: πX(A) ─ [步驟四後的結果] 姓名 王五

73 5-11 非基本運算子的替代 (由基本運算子導出) 一、合併(Join) ,代表符號: p
5-11 非基本運算子的替代 (由基本運算子導出)  一、合併(Join) ,代表符號: p 由乘積衍生而得。將其視為乘積運算後,再依合併條件P來去除不符合條件的記錄。(P:指A與B的共同屬性內含值時) 【公式】 [註]一個合併的運算,可由一個乘積和一個選擇(限制)運算來替代。

74 二、交集(Intersection) ,代表符號:∩
由差集(Difference)衍生而得。 【公式】 A∩B=A-(A-B)=B-(B-A) 若A與B是型態相容的,則A∩B=A Join B [註] 由2個差集來替代

75 三、除法(Division) ,代表符號:÷
由1個卡氏積、2個差集及3個投影運算來實現。

76 5-12 外部合併(Outer Join) 【定義】
當在進行合併(Join)時不管記錄是否符合條件,都會被列出其中一個資料表的所有記錄時,則稱為「外部合併」。因此,其合併結果中會保留第一個關聯(Left Outer-Join)或保留第二個關聯(Right Outer-Join)或保留兩個關聯(Full Outer-Join)中的所有值組。

77 【作法】 進行合併(Join)時,如果不符合條件的記錄就會被預設為NULL值。即左右兩邊的關聯表,不一定要有對應值組。 【使用時機】 應用在異質性分散式資料庫上的整合運算,其好處是不會遺漏資訊。 【例如】 情況一:使用內部合併 學校的選課作業中,如果只利用「內部合併」時,則只有已選課的同學會收到一張選課清單(學生表與課程表「內部合併」的結果。但如果尚未選課者,則連一張個人資料都沒有。 情況二:使用外部合併 學校的選課作業中,如果使用「外部合併」時,則不管是否已選課都可以收到一張選課清單。只是尚未選課者,會收到一個有個人資料而未選課的清單。

78 1.外部合併(Outer Join)<續>
【分類】 基本上,外部合併可分為以下三種合併 (1)左外部合併(Left Outer Join,以 表示) (2)右外部合併(Right Outer Join ,以 表示) (3)全外部合併(Full Outer Join ,以 表示)

79 (1)左外部結合(Left Outer Join)
【定義】  是指以左邊的關聯表為主,右邊的關聯表為輔,因此,左右兩個關聯表在運算時,則會保留左邊關聯表中的所有值組(Tuples)。找不到相匹配的值組時,必須填入NULL(空值)。 【舉例】列出全班同學的選課記錄(以學生表為主,課程表為輔) 學生表

80 【實例】  請問學生表  課程表=?  【解答】

81 (2)右外部結合(Right Outer Join)
【定義】  是指以右邊的關聯表為主,左邊的關聯表為輔,因此,左右兩個關聯表在運算時,則會保留右邊關聯表中的所有值組(Tuples)。找不到相匹配的值組時,必須填入NULL(空值)。 【舉例】列出本學期開課科目被同學選課情況  (以學生表為輔,課程表為主) 課程表

82 【實例】  請問學生 班級=?  【解答】

83 (3)全外部結合(Full Outer Join)
【定義】  是指以左、右邊的關聯表為主,因此,左右兩個關聯表在運算時,則會進行左、右邊關聯表中的聯集。找不到相匹配的值組時,必須填入NULL(空值)。 【舉例】請同時列出全班同學的選課記錄,及本學期開課科目被同學選課情況。

84 【實例】  請問學生 班級=?  【解答】


Download ppt "課程名稱:資料庫系統 授課老師:李春雄 博士"

Similar presentations


Ads by Google