在 Access 中,有時候建立和使用查詢的過程只需從表格中選取欄位,並套用幾項準則,接著就能檢視結果。 但通常的情況是,如果您需要的資料分散在多個資料表中呢? 幸好,您可以建立能合併多個來源的查詢。 本主題探討的是您需要從一個以上的資料表擷取資料的情況,並示範該如何執行。
您想要做什麼?
使用相關資料表中的資料來加強查詢中的資訊
您可能會遇到這樣的情況:以某張資料表為基礎建立的查詢能提供您所需的資訊,但從另一張資料表中擷取的資料,能讓查詢的結果更清楚且實用。 例如,假設您的查詢結果中顯示了一份員工識別碼清單。 您發現,如果能在結果中看到員工姓名的話會更有用,但員工姓名卻位在另一張不同的資料表上。 為了讓員工姓名出現在查詢結果裡,您需要將兩張資料表都納入查詢之中。
使用查詢精靈建立來自主要資料表以及相關資料表中的查詢
確保資料表在關係視窗中有明確的關係。
做法在 [資料庫工具] 索引標籤上,按一下 [顯示/隱藏] 群組中的 [資料庫關聯圖]。
在 [設計] 索引標籤上,按一下 [資料庫關聯圖] 群組中的 [所有關聯]。
識別應該擁有已定義之關聯的資料表。
- 如果資料表顯示在 [資料庫關聯圖] 視窗中,請檢查已經定義關聯。
關聯會在常見欄位中顯示為連結兩張資料表的線段。 您可以按兩下關聯線,來查看該關聯連結了資料表中哪些欄位。 - 如果資料表並未顯示在 [資料庫關聯圖] 視窗中,您就必須新增。
在 [設計] 索引標籤的 [顯示/隱藏] 群組中,按一下 [資料表名稱]。
對您要顯示的每張資料表按兩下,然後按一下 [關閉]。
- 如果資料表顯示在 [資料庫關聯圖] 視窗中,請檢查已經定義關聯。
如果您找不到兩張資料表之間的關聯,請將其中一張資料表上的欄位拖曳至另一張資料表上的欄位,以建立關聯。 用來建立資料表之間關聯的欄位必須擁有相同的資料類型。
注意
你可以在 AutoNumber 資料型別的欄位與 Number 資料型別的欄位之間建立關係,前提是該欄位的欄位大小是長整數。 當你建立一對多的關係時,這種情況通常會發生。
隨即出現 [編輯關聯] 對話方塊。
按一下 [建立] 來建立關聯。
如需您在建立關聯時擁有之選項的詳細資訊,請參閱建立、編輯或刪除關聯。關閉 [資料庫關聯圖] 視窗。
在 [建立] 索引標籤上,按一下 [查詢] 群組中的 [查詢精靈]。
在 [新增查詢] 對話方塊中,按一下 [簡單查詢精靈] ,然後按一下 [確定]。
在 [資料表/查詢] 下拉式方塊中,按一下含有您要納入查詢之基本資訊的資料表。
在 [可用的欄位] 清單中,按一下要納入查詢的第一個欄位,然後再按一下向右單箭號,以將該欄位移動到 [已選取的欄位] 清單。 對該資料表中每一個您想要納入查詢的其他欄位執行同樣動作。 它們可以是您想要在查詢輸出中傳回的欄位,或是您想要用來套用準則,以限制輸出結果之列數的欄位。
在 [資料表/查詢] 下拉式方塊中,按一下含有您想要用來強化查詢結果之相關資料的資料表。
將您想要用來強化查詢結果的欄位新增到 [已選取的欄位] 清單,然後按一下 [下一步]。
按一下 [您要詳細或摘要查詢?] 底下的 [詳細資料] 或 [摘要]。
如果您不想要查詢執行任何彙總函數 (Sum、Avg、Min、Max、Count、StDev 或 Var),請選擇詳細資料查詢。 如果您想要查詢執行彙總函數,請選擇摘要查詢。 選好之後,請按一下 [下一步]。按一下 [完成] 來檢視結果。
使用 [北風] 範本資料庫的範例
在下列範例中,您要使用 [查詢精靈] 來建立查詢,該查詢會顯示訂單清單、每筆訂單的運費,以及處理每筆訂單之員工的姓名。
注意
此範例需要修改 [北風] 範本資料庫。 建議您備份 [北風] 範本資料庫,並在此範例中使用該備份。
使用 [查詢精靈] 建立查詢
- 開啟 [北風] 範本資料庫。 關閉登入表單。
- 在 [建立] 索引標籤上,按一下 [查詢] 群組中的 [查詢精靈]。
- 在 [新增查詢] 對話方塊中,按一下 [簡單查詢精靈] ,然後按一下 [確定]。
- 在 [資料表/查詢] 下拉式方塊中,按一下 [資料表:訂單]。
- 按兩下 [可用的欄位] 清單中的 [訂單識別碼],將該欄位移動到 [已選取的欄位] 清單中。 按兩下 [運費],將該欄位移到 [已選取的欄位] 清單。
- 在 [資料表/查詢] 下拉式方塊中,按一下 [資料表:員工]。
- 按兩下 [可用的欄位] 清單中的 [名字],將該欄位移動到 [已選取的欄位] 清單中。 按兩下 [姓氏],將該欄位移到 [已選取的欄位] 清單。 按一下 [下一步]。
- 因為您建立的是全部訂單的清單,建議您使用詳細資料查詢。 如果您要根據員工摘要運費,或是執行其他彙總函數,請使用摘要查詢。 按一下 [詳細 (顯示每筆記錄的每個欄位)],然後按一下 [下一步]。
- 按一下 [完成] 來檢視結果。
查詢會傳回一份訂單清單,其中含有每筆訂單的運費,以及處理人員的姓氏、名字。
使用兩張資料表與第三張資料表之間的關聯,來連結前兩者中的資料
通常,兩個資料表中的資料會透過第三個資料表相互關聯。 這通常是因為前兩個表格之間的資料是以多對多關係相連。 通常,將兩個資料表間的多對多關係拆分成兩個一對多的關係,分別涉及三個資料表,是良好的資料庫設計實務。 你透過建立第三個資料表,稱為連接表或關係表,該表對應其他資料表有一個主鍵和一個外鍵來達成。 接著,連接表中的每個外鍵與其他表對應的主鍵之間建立一對多的關係。 在這種情況下,即使你只想從其中兩個資料擷取資料,也需要在查詢中包含全部三個資料表。
使用具有多對多關聯性的資料表來建立選取查詢
- 在 [建立] 索引標籤上,按一下 [查詢] 群組中的 [查詢設計]。
- 雙擊包含你想包含查詢資料的兩個表格,以及連結它們的連接表,然後點擊 關閉。
三張資料表都會出現在查詢設計工作區中,並聯結適當的欄位。 - 按兩下您要用於查詢結果中的各個欄位。 每個欄位接著會出現在查詢設計網格中。
- 在查詢設計格線中,使用 [準則] 列來輸入欄位準則。 若要使用欄位準則,但不想要讓欄位內容出現在查詢結果中,請清除該欄位之 [顯示] 列中的核取方塊。
- 若要依據欄位中的值來排序結果,請在查詢設計格線中,(視您想要排序記錄的方式) 按一下該欄位之 [排序] 列中的 [遞增] 或 [遞減]。
- 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。
Access 會以資料表檢視顯示查詢輸出。
使用 [北風] 範本資料庫的範例
注意
此範例需要修改 [北風] 範本資料庫。 建議您備份 [北風] 範本資料庫,並在此範例中使用該備份。
假設你有一個新機會:里約熱內盧的一家供應商找到了你的網站,可能想與你做生意。 然而,他們僅在里約及鄰近的聖保羅地區營運。 他們供應你經紀的每一類食品。 他們是相當大的企業,希望你能保證能提供足夠的潛在銷售機會,讓他們值得投資:每年至少 R$20,000.00 銷售額 (約 9,300.00) 。 你能提供他們所需的市場嗎?
你需要回答這個問題的資料,分別在兩個地方:客戶資料表和訂單詳情資料表。 這些表格透過 Orders 表格相互連結。 表格間的關係已經定義。 在訂單資料表中,每個訂單只能有一位客戶,與 CustomerID 欄位中的客戶資料表相關。 訂單明細表中的每筆紀錄僅與訂單表中的一個訂單相關,該訂單位於 OrderID 欄位。 因此,一個客戶可以有多個訂單,每個訂單都有許多訂單細節。
在這個範例中,您會建立一個交叉資料表查詢,其中顯示里約熱內盧以及聖保羅兩座城市每一年度的總銷售額。
在 [設計] 檢視中建立查詢
- 開啟 [北風] 資料庫。 關閉登入表單。
- 在 [建立] 索引標籤上,按一下 [查詢] 群組中的 [查詢設計]。
- 雙擊「 顧客、 訂單」,然後選擇 「訂單詳情」。
三張資料表都會出現在查詢設計工作區中。 - 在 [客戶] 資料表中,按兩下 [城市] 欄位,將它新增至查詢設計格線。
- 在查詢設計格線中的 [城市] 資料行以及 [準則] 資料列,輸入「In ("里約熱內盧","聖保羅")」。 這會只將位於這兩個城市其中之一的客戶記錄納入查詢之中。
- 在 [訂單詳細資料] 資料表中,按兩下 [出貨日期] 以及 [單價] 欄位。
將欄位新增到查詢設計方格。 - 在查詢設計格線的 [出貨日期] 資料欄中,選取 [欄位] 資料列。 將 [出貨日期] 取代為「年度:Format([出貨日期],"yyyy")」。 這會建立欄位別名「年度」,可讓您只使用 [出貨日期] 欄位中屬於年度的部分。
- 在查詢設計格線的 [單價] 資料欄中,選取 [欄位] 資料列。 以「銷售額: [訂單詳細資料].[單價]*[數量]-[訂單詳細資料].[單價]*[數量]*[折扣]」取代 [單價]。 這會建立能夠計算每筆記錄之銷售額的欄位別名「銷售額」。
- 在 [設計] 索引標籤上,按一下 [查詢類型] 群組中的 [交叉資料表]。
查詢設計格線中會顯示兩個新的資料列,[合計] 和 [交叉資料表]。 - 在查詢設計格線中的 [城市] 資料行中,按一下 [交叉資料表] 資料列,然後按一下 [列名]。
這會讓 [城市] 的值顯示為列名 (也就是說,查詢會針對每個城市傳回一個資料列)。 - 在 [年度] 資料行中,按一下 [交叉資料表] 資料列,然後按一下 [欄名]。
這會讓 [年度] 的值顯示為欄名 (也就是說,查詢會針對每個年度傳回一個資料欄)。 - 在 [銷售額] 資料行中,按一下 [交叉資料表] 資料列,然後按一下 [值]。
這會將 [銷售額] 的值顯示在資料列和資料行的交集處 (也就是說,查詢會針對每個城市和年度組合,傳回一個銷售額的值)。 - 在 [銷售額] 資料行中,按一下 [合計] 資料列,然後按一下 [加總]。
這會讓查詢加總此資料行中的值。
因為您想要查看的是這些資料行的值,而非彙總的值,所以您可以讓另外兩個資料行中 [合計] 資料列保持為 [群組依據] 的預設值。 - 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。
現在,您就有了一個能夠依照年度傳回里約熱內盧和聖保羅總銷售額的查詢了。
檢視來自兩個相似資料表中的所有記錄
有時候,面對兩張結構相同的資料表,但其中之一位於另一個資料庫時,您會想要將它們的資料進行合併。 請考量以下情況。
假設你是一名處理學生資料的分析師。 你正在推動學校與另一所學校之間的資料共享計畫,讓兩校都能改善課程。 對於你想探討的一些問題,最好是一起查看兩所學校的所有紀錄,而不是分別看兩所學校的紀錄。
您可以將另一所學校的資料匯入您資料庫的新資料表中,不過這樣一來,該校資料的任何變更都無法反映在您的資料庫中。 較好的解決方案是連結另一所學校的資料表,然後建立能夠在您執行時合併這些資料的查詢。 這樣您就能在單一操作中進行資料分析,而不需要執行兩項分析,然後又試著在解釋時將它們視為同一個。
要查看兩個結構相同資料表中的所有紀錄,可以使用聯合查詢。
聯合查詢無法在設計檢視中顯示。 你可以用 SQL 指令在 SQL 檢視物件分頁中輸入來建立它們。
使用兩張資料表建立聯集查詢
- 在 [建立] 索引標籤上,按一下 [查詢] 群組中的 [查詢設計]。
- 在 [設計] 索引標籤的 [查詢類型] 群組中,按一下 [聯集]。
查詢會隨即從 [設計檢視] 切換到 [SQL 檢視]。 此時,[SQL 檢視] 物件索引標籤會是空的。 - 在 [SQL 檢視] 中輸入 SELECT,後面接著您要在查詢中使用之第一個資料表的欄位清單。 請將各欄位名稱以方括號括住,並以逗號分開。 輸入完欄位名稱後,請按 ENTER。 游標會移至 [SQL 檢視] 的下一行。
- 輸入 FROM,後面接著您要在查詢中使用的第一個資料表名稱。 按 ENTER。
- 如果你想指定第一個表格中的欄位的標準,輸入 WHERE,接著欄位名稱、一個比較運算子 (通常 (=) ) 的 等號,以及準則。 你可以在 WHERE 子句末尾加上 AND 關鍵字,並使用與第一個準則相同的語法,來增加額外條件;例如,其中 [ClassLevel]=“100” 以及 [CreditHours]>2。 指定完準則後,請按 ENTER。
- 輸入 UNION,然後按下 ENTER。
- 輸入 SELECT,後面接著您要在查詢中使用之第二個資料表的欄位清單。 請以同樣的順序納入此資料表中來自第一個資料表的相同欄位。 請將各欄位名稱以方括號括住,並以逗號分開。 輸入完欄位名稱後,請按 ENTER。
- 輸入 FROM,後面接著您要納入查詢中的第二個資料表名稱。 按 ENTER。
- 如果您想要的話,可以依照本程序步驟 6 中所述,新增一個 WHERE 子句。
- 輸入分號 (;) 以表示查詢結束。
- 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。
您的結果會出現在 [資料工作表] 檢視中。