使用聯集查詢合併多個查詢產生單一結果

重要:  本文係由機器翻譯而成,請參閱免責聲明。本文的英文版本請見這裡,以供參考。

假設 Access 資料庫有兩個不相關的資料表,一個儲存客戶資料,另一個儲存供應商資料,這兩個資料表都有連絡人資訊欄位。您希望在一個檢視中同時看到兩個資料表的連絡人資訊。若要這麼做,首先請為兩個資料表各建立一個選取查詢,以擷取連絡人資訊,然後再建立聯集查詢合併結果。

附註: 本文中資訊是供 Access 桌面資料庫使用。您無法在 Access Web 資料庫或 Access Web App 中建立或使用聯集查詢。

需要複習一下如何建立基本選取查詢嗎?請參閱建立簡單的選取查詢

對於建立聯集查詢,您必須先了解以下事項:

  • 您在聯集查詢中合併的選取查詢必須擁有相同數目的輸出欄位,其順序必須相同,而且其資料類型也必須相同或相容。當您執行聯集查詢時,每一組相對應欄位的資料都會合併到一個輸出欄位,因此查詢輸出的欄位數目等於每一個 Select 陳述式的欄位數目。

  • 聯集查詢是 SQL 專有的,因此必須直接以 SQL 撰寫。撰寫 SQL 專有查詢 (包括聯集查詢) 時,應切換為 [SQL 檢視]。

第 1 步:建立選取查詢

附註: 雖然您可以在一個選取查詢中包含多個資料表或查詢,但是這個程序假設您的每個選取查詢只包含一個資料表的資料。

  1. [建立] 索引標籤的 [查詢] 群組中,按一下 [查詢設計]

  2. [顯示資料表] 對話方塊中,按兩下包含您想要使用之欄位的資料表。資料表便會新增至查詢設計視窗。

  3. 關閉 [顯示資料表] 對話方塊。

  4. 在查詢設計視窗中,按兩下您想要包含的每一個欄位。
    選取欄位時,請務必確認您加入的欄位數目和順序必須和其他選取查詢一樣。請特別注意欄位的資料類別,並確認這些資料類別和您要合併之其他選取查詢中相同位置的欄位相容。例如,如果您的第一個選取查詢包含五個欄位,其中第一個欄位包含日期/時間資料,您必須確認要合併的每個其他選取查詢也有五個欄位,且第一個欄位包含日期/時間資料,依此類推。

  5. (選擇性) 您也可以在欄位中加入準則,方法是在欄位格線的 [準則] 列輸入適當的運算式。

  6. 在您完成新增欄位及欄位準則後,您應該執行選取查詢並檢視輸出結果。在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。

  7. 切換查詢至 [設計檢視]。

  8. 儲存選取查詢,並保持在開啟的狀態。

  9. 為您想要合併的每一個選取查詢重複相同的程序。

如需在查詢中使用準則的詳細資訊,請參閱將準則套用至查詢

第 2 步:合併兩個選取查詢

在此步驟中,您會使用 SQL 陳述式來建立聯集查詢。(如需詳細資訊,請參閱以下的 SQL 語法一節)。

  1. [建立] 索引標籤的 [查詢] 群組中,按一下 [查詢設計]

  2. 關閉 [顯示資料表] 對話方塊。

  3. [設計] 索引標籤的 [查詢] 群組中,按一下 [聯集]

Access 會隱藏查詢設計視窗,並顯示 [SQL 檢視] 物件索引標籤。此時,[SQL 檢視] 物件索引標籤是空的。

  1. 按一下您想要在聯集查詢中合併的第一個選取查詢的索引標籤。

  2. 在 [常用] 索引標籤中按一下 [檢視] > [SQL 檢視]。

  3. 複製選取查詢的 SQL 陳述式。然後按一下您在第 1 步驟中著手建立之聯集查詢的索引標籤。

  4. 將選取查詢的 SQL 陳述式貼上至聯集查詢的 [SQL 檢視] 物件索引標籤中。

  5. 刪除選取查詢 SQL 陳述式結尾的分號 (;)。

  6. 按下 Enter,將游標往下移動一行,然後在新行中輸入 UNION

  7. 按一下您想要在聯集查詢中合併的下一個選取查詢的索引標籤。

  8. 重複步驟 5 至 10,直到選取查詢的所有 SQL 陳述式都已複製貼上到聯集查詢的 [SQL 檢視] 視窗中。請勿刪除最後一個選取查詢的 SQL 陳述式後面的分號,也不要輸入任何項目。

  9. [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]

您的聯集查詢結果會顯示在資料工作表檢視中。

頁面頂端

使用聯集查詢的秘訣

  • 若要區別哪一列資料來自哪一個資料表,請在每一個 Select 陳述式中新增一個文字字串欄位。

    例如,假設一個 Select 陳述式是從名為 Products 的資料表擷取欄位,另一個 Select 陳述式則是從名為 Services 的資料表擷取欄位,則請在第一個陳述式後面加上 Products 字串作為欄位,在第二個陳述式後面加上 Services 字串。您也可以使用 AS 關鍵字,為字串指定欄位別名 (例如「type」),如下列範例所示:

    SELECT field1, field2, ... "Product" AS type

    SELECT field1, field2, ... "Service" AS type

    查詢輸出便會包含一個名為「type」的欄位,顯示該列是來自 Products 資料表或 Services 資料表。

  • 每一個 UNION 關鍵字會合併緊接在其前後的 SELECT 陳述式。如果您在查詢中的某一些 UNION 關鍵字搭配使用 ALL 關鍵字,但有些則沒有,那麼結果只會包含使用 UNION ALL 合併的 SELECT 陳述式組合中的重複列,並不會包含使用 UNION、但沒有使用 ALL 關鍵字合併的 SELECT 陳述式中的重複列。

  • 選取查詢中的欄位數量、資料類型及順序必須相符。您可以利用計算或子查詢等運算式使其相符。

    例如,兩字元的年份與四字元的年份,可以利用 Right 函數取出四字元年份的後兩碼,使其相符。

使用聯集查詢的結果建立新資料表

首先使用聯集查詢做為新建選取查詢的輸入,然後使用該選取查詢做為產生資料表查詢的基礎,如以下步驟所示:

  1. 建立並儲存聯集查詢。

  2. [建立] 索引標籤的 [查詢] 群組中,按一下 [查詢設計]

  3. [顯示資料表] 對話方塊中,按一下 [查詢] 索引標籤。

  4. 按兩下聯集查詢,並關閉 [顯示資料表] 對話方塊。

    附註: 若 [訊息列] 出現 [安全性警告],表示可能已經停用巨集指令查詢。若要啟用巨集指令查詢,請按一下 [訊息列] 的 [啟用內容]

  5. 在查詢設計格線中,在聯集查詢的物件索引標籤上按兩下星號 (*),以使用聯集查詢的所有欄位建立一個新的資料表。

  6. 在 [設計] 索引標籤的 [查詢類型] 群組中,按一下 [製成資料表]。

  7. [製成資料表] 對話方塊中,輸入新資料表的名稱。

  8. 或者,您可以選擇指定不同的資料庫來建立資料表。

  9. 按一下 [確定]

  10. 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。

使用聯集查詢執行完整外部連結

您可以使用聯集查詢來執行完整外部聯結。外部連結不會限制從任一連結資料表所傳回的列,但是會根據連結欄位中的值將列合併。

  1. 建立一個查詢,其中您想要用來進行完整外部連結的欄位擁有左外部連結。

  2. [常用] 索引標籤的 [檢視] 群組中,按一下 [檢視],再按一下 [SQL 檢視]

  3. 按下 Ctrl+C,複製 SQL 程式碼。

  4. 刪除 FROM 子句結尾的分號,然後按下 Enter。

  5. 輸入 UNION,然後按下 Enter。

    附註: 當您使用聯集查詢來執行完整的外部連結時,請勿使用 ALL 關鍵字。

  6. 按下 Ctrl+V,貼上您在步驟 3 複製的 SQL 程式碼。

  7. 在您貼上的程式碼中,將 LEFT JOIN 變更為 RIGHT JOIN

  8. 刪除第二個 FROM 子句結尾的分號,然後按下 Enter。

  9. 加入 WHERE 子句,指定在 FROM 子句中所列的第一個資料表 (左資料表) 中,連結欄位的值為 NULL。

    例如,如果 FROM 子句為:

    FROM Products RIGHT JOIN [Order Details] 
    ON Products.ID = [Order Details].[Product ID]

    接著再加入下面這個 WHERE 子句:

    WHERE Products.ID IS NULL

  10. 在 WHERE 子句的結尾輸入一個分號 (;),做為聯集查詢的結尾。

  11. [設計] 索引標籤的 [結果] 群組中,按一下 [執行]
    聯集查詢的結果會顯示在資料工作表檢視。

如需詳細資訊,請參閱連接資料表與查詢

頁面頂端

聯集查詢的需求與 SQL 語法

聯集查詢的一些需求

  • 您在聯集查詢中合併的選取查詢必須擁有相同數目的輸出欄位,其順序必須相同,而且其資料類型也必須相同或相容。當您執行聯集查詢時,每一組相對應欄位的資料都會合併到一個輸出欄位,因此查詢輸出的欄位數目等於每一個 Select 陳述式的欄位數目。

    附註: 在進行聯集查詢時,數字和文字資料類型是相容的。

  • 聯集查詢是 SQL 專有功能,因此必須直接以 SQL 撰寫。撰寫 SQL 專有查詢 (包括聯集查詢) 時,應切換為 [SQL 檢視]

聯集查詢的 SQL 語法

在聯集查詢中,每一個選取查詢 (又稱為 SELECT 陳述式) 均有下列子句:

子句

包含以下各項的清單:

SELECT

包含您要擷取之資料的欄位。

FROM

包含這些欄位的資料表。

選擇性 WHERE

那些欄位的準則。

SELECT 陳述式是使用 UNION 關鍵字合併。

聯集查詢基本的 SQL 語法如下:

SELECT field_1[, field_2,…]
FROM table_1[, table_2,…]
UNION [ALL]
SELECT field_a[, field_b,...]
FROM table_a[, table_b,…];

例如,假設資料庫有一資料表名為 Products,另一個名為 Services,兩個資料表均有欄位儲存產品或服務的名稱、價格、是否有保固或保證,以及是否獨佔該產品或服務。雖然 Products 資料表儲存保固資訊,而 Services 資料表儲存保證資訊,其基本資訊是相同的 (即一個產品或服務是否有保障其品質)。您可以使用如下的聯集查詢來合併兩個資料表的四個欄位:

SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services;

讓我們逐行查看上述語法範例:

語法

說明

其他資訊

SELECT name, price, warranty_available, exclusive_offer

第一個 SELECT 子句

接在 SELECT 後面的一串識別碼會指出您要從中擷取資料的欄位。

SELECT 子句必須至少列出一個欄位。

這個 SELECT 子句會列出欄位識別碼:namepricewarranty_availableexclusive_offer

FROM Products

第一個 FROM 子句

SELECT 子句後面是 FROM 子句,兩者構成基本的 SELECT 陳述式。

而接在 FROM 後面的一串識別碼會指出哪些資料表包含了 SELECT 子句所列的欄位。

FROM 子句必須至少列出一個資料表。

這個 FROM 子句列出的資料表識別項為:Products

UNION ALL

這是 UNION 關鍵字,以及選擇性的 ALL 關鍵字

UNION 前面的 SELECT 陳述式結果會與 UNION 後面的 SELECT 陳述式結果合併在一起。

若加上 ALL 關鍵字,則重複的資料列並不會從聯集查詢結果中移除。

使用 ALL 關鍵字時查詢執行較快,因為 Access 不必查看重複的資料列。

如果下列任一條件成立,您就應該使用 ALL 關鍵字:

  • 您確定選取查詢將不會產生任何重複的列。

  • 即使結果中出現重複的列,您也無所謂。

  • 您想要檢視重複的列。

SELECT name, price, guarantee_available, exclusive_offer

第二個 SELECT 子句

一些規則:

  • 第二個 SELECT 子句的欄位數量必須與第一個 SELECT 子句相同。

  • 含有相同資料的欄位在子句中出現的順序必須相同。

  • 含有相同資料的欄位必須擁有相同或相容的資料類型。

附註: 聯集查詢輸出的欄位名稱取自第一個 SELECT 子句。因此,在這個範例的查詢輸出中,來自 "warranty_available" 欄位和 "guarantee_available" 欄位的資料會命名為 "warranty_available"。

FROM Services

第二個 FROM 子句

聯集查詢之 FROM 子句中的資料表無限制。您可以建立一個聯集查詢,其中每一個 FROM 子句都使用相同的資料表。在 FROM 子句中,您可以使用不同數目的資料表。在這個範例中,每一個 FROM 子句都只有一個資料表。

頁面頂端

附註: 機器翻譯免責聲明︰本文係以電腦系統翻譯而成,未經人為介入。Microsoft 提供此等機器翻譯旨在協助非英語系使用者輕鬆閱讀 Microsoft 產品、服務及技術相關內容。基於本文乃由機器翻譯而成,因此文中可能出現詞辭、語法、文法上之錯誤。

擴展您的技能
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與其中一位 Office 支援專員連絡以深入了解您的意見。

×