第十七章 access 資料庫簡介

78
第第第第 Access 第第第第第 第第第 [email protected] http://mirlab.org/jang 第第第第第 MIR 第第第

Upload: trixie

Post on 28-Jan-2016

68 views

Category:

Documents


0 download

DESCRIPTION

第十七章 Access 資料庫簡介. 張智星 [email protected] http://mirlab.org/jang 台大資工系 MIR 實驗室. 本章大綱. 大綱 本 章介紹 MS Access 資料庫的建立及查詢,並說明關聯性資料表的操作及特性,以及如何使用 GUI 介面來產生查詢資料庫所用的 SQL 指令。後續我們若要在 ASP 網頁和資料庫進行溝通,都必須瞭解資料庫的特性以及 SQL 指令,所以對於「網頁與資料庫整合」而言,這一章是很重要的入門基礎。 主題 17-1 :資料庫簡介 17-2 :資料庫查詢:單一資料表 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第十七章 Access  資料庫簡介

第十七章Access 資料庫簡介

張智星[email protected]

http://mirlab.org/jang台大資工系 MIR實驗室

Page 2: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

本章大綱 大綱

本 章介紹 MS Access 資料庫的建立及查詢,並說明關聯性資料表的操作及特性,以及如何使用 GUI 介面來產生查詢資料庫所用的 SQL 指令。後續我們若要在 ASP 網頁和資料庫進行溝通,都必須瞭解資料庫的特性以及 SQL 指令,所以對於「網頁與資料庫整合」而言,這一章是很重要的入門基礎。

主題 17-1 :資料庫簡介 17-2 :資料庫查詢:單一資料表 17-3 :資料庫查詢:關聯性資料表 17-4 :關聯對資料處理的影響

2/79

Page 3: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

17-1 :資料庫簡介

本小節介紹 MS Access 的基本觀念與使用。

3/79

Page 4: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

資料庫概念 資料庫( Databases ):由數個資料表

( Tables )所形成的集合。 資料表:由數筆記錄( Record )所成的集合。

每筆記錄都包含數個不同的欄位( Fields )。

4/79

Page 5: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

資料表格式 (1)

5/79

Page 6: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

資料表格式 (2) 說明

資料表中,每一個橫列稱為一筆記錄。 每一個直行稱為欄位,每一筆記錄在某個特定欄位的值稱為「欄位值」。

上列資料表,是以序號來進行排序顯示,但在資料庫的內部儲存方式中,並不會有特定的排序。

從資料表中抓出資料,欄位的順序是根據欄位創造日期的先後,而記錄的順序是根據「主索引」( Primary Key )的欄位來進行排序,每個資料表可以選定一個欄位來做為主索引,而且主索引欄位的欄位值是不能重覆的。

上述歌曲資料表中,主索引可以是序號,這是對每一首歌獨一無二的數值,可以用來代表某一首特定的歌曲。

6/79

Page 7: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

開啟資料表 我們點選 song 的資料表,就可以開啟此表。 資料庫:

song01.mdb

7/79

Page 8: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

檢視資料表 (1)

8/79

Page 9: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

檢視資料表 (2) 說明

資料表中,可以看到 11 筆記錄,每筆記錄有 4 個欄位。

欄位名稱分別是「序號」、「歌曲名稱」、「主唱者」、「年份」。

每個欄位都有特定的資料型態,這些資料型態可以由資料表的「設計檢視」來開啟。

9/79

Page 10: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

設計檢視 (1) 我們先關掉資料表,再用右鍵點選 song 資料表的圖示,選擇設計檢

視。

10/79

Page 11: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

設計檢視 (2)

11/79

Page 12: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

設計檢視 (3) 說明

開啟資料表的「設計檢視」選項後,可以看到每個欄位的資料類型,例如「自動編號」、「文字」、「數值」等。

後面有表列出 MS Access 資料類型。

12/79

Page 13: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

設計檢視 (4) 點選「文字」右方的小倒三角形,就可以改變這個欄位的資料類型。

13/79

Page 14: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

可選用的資料類型 (1)資料類型 說明

文字 用來儲存文字資料,例如姓名、身份證字號、密碼、地址等。最大長度只有 255 字元。

備忘 用來儲存文字資料,最大長度可達 64,000 字元,但是不支援排序功能。

數字 儲存數值資料,又可分為位元組、整數、長整數、單精準數、雙精準數、複製編號與小數點等 7 類。

日期 / 時間 儲存時間和日期的資料,可以選用不同的呈現方式。

貨幣 儲存貨幣或金額,例如售價、定金等。

自動編號

此欄位值都是不重複的正整數,由資料庫自動產生,每新增一筆記錄,資料庫就會以加 1 的方式產生此欄位值,因此不會重複。若有記錄被刪除,此欄位就不會形成連續的整數。通常我們會指定使用具有此種資料類型的欄位為主索引,以便獨一無二地指到某一筆特定的記錄。 14/79

Page 15: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

可選用的資料類型 (2)

說明 可以使用「設計檢視」來新增或刪除欄位,然後再打開資料表,就可以將一筆一筆的資料輸入到資料表內了。

最後別忘了要存檔,再關閉此資料庫。

資料類型 說明

是 /否 此資料類型只能有兩種值:「是」或「否」。可用於記錄是否註冊、是否付款、是否過期等。

OLE 物件

存放各類形的檔案,例如圖片、聲音、動畫、 Excel 試算表、Word 文件等。

超連結 存放超連結或網址。

查閱精靈 嚴格地說,這並不是一種資料類型,而是方便輸入文字資料的一種功能。

15/79

Page 16: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

17-2 :資料庫查詢:單一資料表

本小節將說明如何對 Access 資料庫進行單一資料表的查詢,特別著重在「圖形使用者介面」( Graphic User Interface ,簡稱 GUI )的使用。

16/79

Page 17: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

設計查詢 (1) 以 song01.mdb 來說明。首先開啟資料庫,同時點選「查詢」物件。

17/79

Page 18: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

設計查詢 (2) 點選「使用設計檢視建立新查詢」後可得。

18/79

Page 19: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

設計查詢 (3) 說明

按「新增」,就可以將資料表「 song 」加入目前的查詢,然後按「關閉」。

要找「張惠妹所唱的歌曲」,可以分兩步驟: 選取相關欄位:點選上半部的「歌曲名稱」,拖放到下半部的第一個欄位,再點選上半部的「主唱者」,拖放到下半部的第二個欄位。

設定欄位選取準則:將「主唱者」欄位的「準則」空格填入「張惠妹」。

結果如下頁圖示所示。

19/79

Page 20: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

設計查詢 (4)

20/79

Page 21: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

執行查詢 (1) 要執行查詢,可以直接點選工具列的驚嘆號。

21/79

Page 22: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

執行查詢 (2) 說明

所列出來的資料就是張惠妹所唱的歌。 當你要關掉這個查詢結果時, Access 會詢問你是否要儲存這個查詢,你可以將它直接儲存成「張惠妹所唱的歌曲」。

下次只要你點選這個查詢,系統自然就會從資料表中,抓出並顯示符合查詢準則的資料。

22/79

Page 23: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

查詢方式 一個查詢可以有不同的檢視方式,例如:

設計檢視:以圖形使用者介面來進行查詢的設計 。 資料表檢視:查詢所得的資料列表 。 SQL 檢視:以文字化的 SQL ( Structure

Query Language )指令來指定查詢 。

23/79

Page 24: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

SQL 檢視 (1) 顯示此查詢對應的 SQL 指令,只要在打開查詢後(使用「設計檢視」

或「資料表檢視」),點選工具列的第一個按鈕,並下拉至「 SQL 檢視」。

24/79

Page 25: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

SQL 檢視 (2)

25/79

Page 26: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

SQL 檢視 (3) 說明

Access 由「設計檢視」產生 SQL 指令時,有時候會在資料表名稱或欄位名稱加上中括弧,以避開資料表名稱或欄位名稱中,可能出現的空白或其它特殊字元。

使用 ASP 與資料庫整合時,對資料庫的處理必須倚賴 SQL 指令。

用「設計檢視」產生需要的查詢,再將此查詢轉換成 SQL 指令,就可以貼到 ASP 的程式碼裡面。

26/79

Page 27: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

資料表排序 查詢「張惠妹所唱的歌 (依年代由近而遠排序 ) 」:在查詢加入 " 年

份 " 欄位後,並點選 " 排序 " ,選擇 "遞減排序 " ,並點選驚嘆號執行。

27/79

Page 28: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

使用 AND 查詢資料 (1) 查詢「張惠妹在 1998 年所唱的歌」:在「年份」欄位新增準則。

28/79

Page 29: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

使用 AND 查詢資料 (2) 說明

相對應的 SQL 指令

"=" 的意義和 JavaScript 不同,在這邊跟JavaScript 中的 "==" 一樣表示 "相等 "意思的。

SELECT 後面的“ song.“ 可以忽略不寫。

SELECT song. 歌曲名稱 , song. 主唱者 , song. 年份 FROM song WHERE (((song. 主唱者 )=" 張惠妹 ")AND ((song. 年份 )=1998));

29/79

Page 30: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

使用 OR 查詢條件 (1) 考慮下列查詢:「 2002 年的歌曲或是由張惠妹主唱的歌曲」。

30/79

Page 31: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

使用 OR 查詢條件 (2) 說明

若有數個條件必須同時成立(「且」, And ),我們就要將比對字串或數值放在「準則」的同 一列。

若這些條件只要一個成立即可(「或」, Or ),我們就要將這些條件放在「準則」以下的不同列。

以 Access 的圖形使用者介面來進行查詢,只能用於當所有的比對條件都是「且」或都是「或」的情況,若有較複雜的邏輯判斷式,就必須靠 SQL 指令來達成。

上述查詢中,相對應的 SQL 指令SELECT song. 歌曲名稱 , song. 主唱者 , song. 年份 FROM song WHERE (((song. 主唱者 )=" 張惠妹 ")) OR (((song. 年份 )=2002)); 31/79

Page 32: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

顯示不重複的查詢資料 (1) 查詢「歌星列表」:使用滑鼠右鍵先點選查詢視窗的下半部任意處,再

選取「合計」功能。

32/79

Page 33: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

顯示不重複的查詢資料 (2) 查詢畫面會多一個名稱為「合計」橫列,其內容為「群組」,此功能可將相同的紀錄先排序後,再將相同的數筆紀錄合併成一筆。

33/79

Page 34: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

顯示不重複的查詢資料 (3) 執行查詢結果後

34/79

Page 35: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

顯示不重複的查詢資料 (4) 說明

因為使用「群組」功能,所以上述是已經排序過的結果。

相對應的 SQL 指令

“GROUP BY” 就是「群組」功能,可以將欄位中相同的數筆紀錄合併成一筆。

SELECT song. 主唱者 FROM song GROUP BY song.主唱者 ;

35/79

Page 36: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

顯示不重複的查詢資料 (5) 說明

另一個相同效果的 SQL 指令

此查詢可得到相同結果,但是卻無法由「設計檢視」看到 DISTINCT 的功能,只能由「 SQL 檢視」來指定。

SELECT DISTINCT song. 主唱者 FROM song;

36/79

Page 37: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

查詢總數 (1) 查詢「歌曲總數」:在產生「合計」橫列後,將滑鼠焦點移到「群組」,

就可以顯示下拉選單的按鈕,按下後,請選擇「筆數」。

37/79

Page 38: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

查詢總數 (2) 執行查詢後

38/79

Page 39: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

查詢總數 (3) 說明

顯示查詢中代表資料表中共有 11 筆資料。 相對應的 SQL 指令

“Count()” 表示計算某個欄位的資料總數。 “AS” 表示自訂查詢資料表的名稱。

SELECT Count(song. 歌曲名稱 ) AS 歌曲名稱之筆數 FROM song;

39/79

Page 40: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

設計檢視指定不周詳 (1) 查詢「張惠妹所唱歌曲的總數」:直覺的做法是將「主唱者」的「準則」設定成「張惠妹」,並選取「合計」的「群組」功能。

40/79

Page 41: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

設計檢視指定不周詳 (2) 說明

執行查詢時,會產生「準則運算式的資料類型不符合」的錯誤訊息。

若選用「 SQL 檢視」,可看到相對應的 SQL 指令

錯誤發生在最後一列的條件,因為 Count 是一個函數,只能用來計算資料的筆數,所以我們可以用手動改成

SELECT Count(song. 主唱者 ) AS 主唱者之筆數 FROM song HAVING (((Count(song. 主唱者 ))=" 張惠妹 "));

SELECT Count(song. 主唱者 ) AS 主唱者之筆數 FROM song HAVING (((song. 主唱者 )=" 張惠妹 ")); 41/79

Page 42: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

設計檢視指定不周詳 (3) 再選用「設計檢視」,畫面事實上有點亂,而且不容易懂,這也顯示有

一些簡單的查詢可能還是用 SQL 命令最適合,若要用簡單易懂的圖形介面來表示,反而有困難。

42/79

Page 43: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

設計檢視指定不周詳 (4) 查詢結果

43/79

Page 44: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

查詢群組資料的總數 (1) 查詢「每一位歌手唱過的歌曲數目」:在「主唱者」欄位選取「合計 /群組」,然後在「歌曲名稱」欄位選取「合計 / 筆數」。

44/79

Page 45: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

查詢群組資料的總數 (2) 說明

選用「 SQL 檢視」,可看到相對應的 SQL 指令SELECT song. 主唱者 , Count(song. 歌曲名稱 ) AS 歌曲名稱之筆數 FROM song GROUP BY song. 主唱者 ;

45/79

Page 46: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

查詢群組資料的總數 (3) 查詢結果

46/79

Page 47: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

17-3 :資料庫查詢:關聯性資料表

本小節介紹資料表間的查詢與關聯,產生出更有意義的查詢。

47/79

Page 48: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

關聯性資料表 (1) 資料庫可以包含數個資料表,不同資料表之間的欄位可以有關聯性。

我們可以根據這些資料欄位的關聯性來使資料庫的資料更符合實際世界的狀況,此種具有關聯性的資料庫,即稱為關聯性資料庫( Relational Databases )。

48/79

Page 49: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

關聯性資料表 (2) 以 song01.mdb 內的 song 資料表來說明

49/79

Page 50: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

關聯性資料表 (3) 說明

「主唱者」的欄位中很多資料是重複的,如果我們還要增加和「主唱者」相關的資料, 例如「出道年份」、「身高」、「嗜好」等,就會增加更多重覆的資料。

我們可以將和主唱者相關的資料放到另一個資料表 singer ,並指定每首歌曲所對應的歌手,這樣做的好處是:

減少資料的重複:例如「張惠妹」的資料不會出現很多次。 保持資料的一致性:「張惠妹」只有一筆資料,因此不需要輸入「張惠妹」很多次,也比較不會出現把「張惠妹」誤輸入成「張蕙妹」的情況。

保持資料的完整性:例如我們可以規定,沒有對應歌手的歌曲資料,不允許登錄到 song 資料庫。

50/79

Page 51: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

沒有關聯的查詢 (1) 我們使用一個資料較少的檔案 song02.mdb 來進行以下

說明,其中 song 和 singer 資料表的內容如下

song: singer:

序號 名稱 歌手序號 年份

1  用心良苦 1 1993 

2  聽海 4 1998 

8  戀人未滿 9 2002 

9  I.O.I.O.  9 2002 

17  神話 0 1983 

18  花心 0  1993

序號 姓名 類別 出道年份1  張宇 男歌手 1973 

4  張惠妹 女歌手 1975 

6  蕭亞軒 女歌手 1971 

9  S.H.E  女團體 1960 

11  永邦 男歌手 1969 

51/79

Page 52: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

沒有關聯的查詢 (2) 說明

由上述列表可以知道,每一首歌有一個欄位是「歌手序號」,指到 singer 資料表的「序號」欄位,就可以找到對應的歌手資料。我們可以使用 SQL 查詢來列出歌手和歌曲的所有可能組合,所用的 SQL 指令為:

SELECT 中的“ song.” 和“ singer.” 不可以省略。 下頁是查詢結果,列表共有 30 筆資料,代表由第一個資料表( 6 筆資料)和第二個資料表( 5 筆資料)的所有可能組合,但是我們並沒有用到兩個資料表之間的關聯,所以得到的結果當然不正確。

SELECT song. 名稱 , singer. 姓名 FROM song, singer;

52/79

Page 53: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

沒有關聯的查詢 (3)名稱 姓名

用心良苦 張宇 聽海 張宇 戀人未滿 張宇 I.O.I.O.  張宇 神話 張宇 花心 張宇 用心良苦 張惠妹 聽海 張惠妹 戀人未滿 張惠妹 I.O.I.O.  張惠妹 神話 張惠妹 花心 張惠妹

名稱 姓名用心良苦 蕭亞軒 聽海 蕭亞軒 戀人未滿 蕭亞軒 I.O.I.O.  蕭亞軒 神話 蕭亞軒 花心 蕭亞軒 用心良苦 S.H.E 

聽海 S.H.E 

戀人未滿 S.H.E 

I.O.I.O.  S.H.E 

神話 S.H.E 

花心 S.H.E 

名稱 姓名用心良苦 永邦 聽海 永邦 戀人未滿 永邦 I.O.I.O.  永邦 神話 永邦 花心 永邦

53/79

Page 54: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

關聯查詢 (1) 把有關聯性的欄位加入條件式,得到下列的 SQL 指令(在此例是 song 資料表的「歌手序號」以及 singer 資料表的「序號」欄位)

得到的結果

SELECT song. 名稱 , singer. 姓名 FROM singer, song WHERE (song. 歌手序號 =singer. 序號 );

名稱 姓名用心良苦 張宇 聽海 張惠妹 戀人未滿 S.H.E 

I.O.I.O.  S.H.E 54/79

Page 55: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

關聯查詢 (2) 對應的「設計檢視」畫面

55/79

Page 56: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

關聯查詢 (3) 說明

上述的做法是以 where 子句來指定資料所必須具備的特性,另一種做法則是直接在「設計檢視」中指定資料表之間的關聯。

關聯發生於 song 資料表的「歌手序號」及 singer 資料表的「序號」。欲建立此關連,我們可以選取 song 資料表的「歌手序號」欄位後,拖放到 singer 資料表的「序號」欄位,就可以建立這兩個資料表的關聯性(會產生關聯線段以連接有關聯性的欄位),然後再加入需要查詢的欄位名稱,如下頁圖示。

56/79

Page 57: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

關聯查詢 (4)

57/79

Page 58: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

關聯查詢 (5) 對應的 SQL 指令

得到的結果

SELECT song. 序號 , song. 名稱 , singer. 姓名

FROM song INNER JOIN singerON song. 歌手序號 = singer. 序號 ;

序號 名稱 姓名1  用心良苦 張宇 2  聽海 張惠妹 8  戀人未滿 S.H.E 

9  I.O.I.O.  S.H.E 

58/79

Page 59: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

關聯查詢 (6) 說明

在上述範例中, SQL 指令使用了 INNER JOIN 。事實上,對於資料表的連接( Join ),可以分成三類:

Inner Join :只會列出來兩個資料表連接欄位的資料相同的記錄。

Left Join :列出所有來自左資料表的記錄,以及連接欄位相等的右資料表的記錄。

Right Join :列出所有來自右資料表的記錄,以及連接欄位相等的左資料表的記錄。

59/79

Page 60: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

Join 的連接屬性 (1) 如果我們雙擊連接關聯性欄位的線段,就會跳出「連接屬

性」的視窗。

此視窗的預設值「僅包含兩個資料表連接欄位的資料相同的記錄」,就是 Inner Join 。

點選第 2 個選項(「包括所有來自“ song” 的記錄和只包括那些連接欄位相等的“ singer” 欄位」),就是 Left Join 。

60/79

Page 61: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

Join 的連接屬性 (2) 選擇 Left Join 並按「確定」。

61/79

Page 62: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

Join 的連接屬性 (3) 關聯線段被加上了一個由左向右的箭頭,代表 Left

Join ,相對應的 SQL 命令如下:SELECT song. 序號 , song. 名稱 , singer. 姓名 FROM song LEFT JOIN singer ON song. 歌手序號 = singer. 序號 ;

62/79

Page 63: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

Join 的連接屬性 (4) 得到的結果代表「列出所有的歌,以及這些歌所可能對應的歌手」。

序號 名稱 姓名1  用心良苦 張宇 2  聽海 張惠妹 8  戀人未滿 S.H.E 

9  I.O.I.O.  S.H.E 

17  神話  

18  花心

63/79

Page 64: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

Join 的連接屬性 (5) 點選第 3 個選項(「包括所有來自 "singer" 的記錄和只

包括那些連接欄位相等的 "song" 欄位」),就是 Right Join ,對應的 SQL 命令

得到的結果代表「列出所有的歌手,以及這些歌手可能對應的歌」。

SELECT song. 序號 , song. 名稱 , singer.姓名 FROM song RIGHT JOIN singer ON song. 歌手序號 = singer. 序號 ;

序號 名稱 姓名1  用心良苦 張宇 2  聽海 張惠妹

蕭亞軒 9  I.O.I.O.  S.H.E 

8  戀人未滿 S.H.E 

永邦 64/79

Page 65: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

Join 的連接屬性 (6) 說明

有關於 Outer Join ,說明如下: Left Join 又稱為 Left Outer Join 。 Right Join 又稱為 Right Outer Join 。 Full Outer Join 就是 Left Join 和 Right Join 的聯集,但是 Access 目前不支援。

以上的做法要在建立查詢時,才建立起資料表之間的關聯,另一種方式是事先就建立好資料表的關聯,這是永久性的關聯,所以在進行查詢時,也會將此關聯包含進來。

65/79

Page 66: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

永久性關聯 (1) 開啟「工具 / 資料庫關聯圖」。

66/79

Page 67: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

永久性關聯 (2) 選取 song 資料表的「歌手序號」欄位後,拖放到 singer 資料表的

「序號」欄位,就可以建立這兩個資料表的永久關聯,此時會跳出來「編輯關聯」的畫面。

說明 有關這個畫面的選項「強迫參考完整性」,我們會在下一節說明。 只要按下「建立」,即可建立根基於 Inner Join 的永久關聯。 也可以按下「連接類型」,來設定其他類別的 Join ,如 Left Join

或是 Right Join 。67/79

Page 68: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

永久性關聯 (3) 此線段所連結的欄位即是互有關聯的欄位。

68/79

Page 69: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

永久性關聯 (4) 說明

若要編輯關聯,可以雙擊此線段,即可開啟「編輯關聯」的視窗。

一旦建立永久關聯後,在「設計檢視」模式下編輯查詢時,只要加入相關的資料表,即可反應此永久關聯,而不需要再自行手動加入。

69/79

Page 70: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

17-4 :關聯對資料處理的影響

本小節說明如何在 Access 資料庫設定資料庫關聯後,進一步設定關聯對於資料的新增、修改、刪除的影響。

70/79

Page 71: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

強迫參考完整性 (1) 以 song03.mdb 的資料庫來說明。開啟此資料庫後,點選「工具 / 資

料表關聯圖」,可以看到 song 和 singer 資料表之間已經有關聯存在。

71/79

Page 72: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

強迫參考完整性 (2) 點選關聯線段來編輯關聯,勾選「強迫參考完整性」,但不勾選「重疊

顯示更新相關欄位」和「重疊顯示刪除相關記錄」。

72/79

Page 73: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

強迫參考完整性 (3) 此時資料庫關聯圖已被修改

73/79

Page 74: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

強迫參考完整性 (4) 說明

其中關聯線端的兩端分別被加上「 1 」和「∞」,代表這兩個欄位的關聯是「一對多」,也就是一個歌星可以唱很多首歌,但是一首歌只能有一個歌星來唱。

Access 是根據 song 資料表的「序號」是不可重複的主索引,因此自動決定這個關聯是「一對多關聯」。

74/79

Page 75: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

強迫參考完整性 (5) 打開 singer 資料表,可以看到每筆資料都有一個「 + 」號,表示此

資料表是「父資料表」,不可任意刪除資料,否則將會影響到「子資料表」,也就是 song 資料表。

75/79

Page 76: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

強迫參考完整性 (6) 點選包含「張惠妹」的記錄的正號可以知道,「張惠妹」這筆資料和

song 資料表的三筆記錄有關聯。

76/79

Page 77: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

強迫參考完整性 (7) 說明

要刪掉 singer 資料表中「張惠妹」的這筆資料, Access 會回覆訊息視窗。

系統不允許使用者刪除「張惠妹」此筆資料,因為若直接刪除此筆資料,會使得 song 資料表中的三筆資料變成孤兒,找不到對應的歌手,這就是勾選「強迫參考完整性」的效果,會保持資料的完整性。

77/79

Page 78: 第十七章 Access  資料庫簡介

JavaScript 程式設計與應用:用於伺服器端的 ASP環境

強迫參考完整性 (8) 說明

若我們執意要刪除父資料表中的記錄,並對於相關聯的子資料表的記錄也希望一併刪除,那我們就 可以勾選「重疊顯示刪除相關記錄」,此時使用者只要刪除 singer 資料表的「張惠妹」這筆資料,系統即會一併刪除 song 資料表中的「聽海」、「牽手」、「原來你什麼都不要」三筆資料。

若我們要修改父資料表中的某一個關聯欄位,並對於相關聯的子資料表的記錄也希望能自動一併修改,那我們就可以勾選「重疊顯示更新相關欄位」,即可達到此功能。

78/79