萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> access教程 >> access基礎教程 >> Access 2007使用聯合查詢合並多個選擇查詢的結果

Access 2007使用聯合查詢合並多個選擇查詢的結果

對於多個相似的選擇查詢,當您希望將它們返回的所有數據一起作為一個合並的集合查看時,便可以使用聯合查詢。

本文將向您介紹如何根據兩個或多個現有的選擇查詢創建聯合查詢,同時說明如何使用結構化查詢語言 (SQL) 編寫聯合查詢。

為完成本文中的示例,您應該對如何創建和運行選擇查詢有基本的了解。有關如何創建選擇查詢的詳細信息,請參閱請參閱部分中的鏈接。

本文內容

聯合查詢基礎知識

聯合查詢有哪些功能?

聯合查詢可合並多個相似的選擇查詢的結果集。

例如,假設您有兩個表,一個用於存儲有關客戶的信息,另一個用於存儲有關供應商的信息,並且這兩個表之間不存在任何關系。又假設這兩個表都有一些存儲聯系人信息的字段,而您希望同時查看這兩個表中的所有聯系人信息。

您可以為每個表都創建一個選擇查詢 (選擇查詢:就表中存儲的數據提出問題,然後在不更改數據的情況下以數據表的形式返回一個結果集。),以便只檢索包含聯系人信息的那些字段,但返回的信息仍將位於兩個單獨的位置。要將兩個或多個選擇查詢的結果合並到一個結果集中,可以使用聯合查詢。

聯合查詢的要求

聯合查詢中合並的選擇查詢必須具有相同的輸出字段數、采用相同的順序並包含相同或兼容的數據類型。在運行聯合查詢時,來自每組相應字段中的數據將合並到一個輸出字段中,這樣查詢輸出所包含的字段數將與每個 Select 語句相同。

 注釋   根據聯合查詢的目的,“數字”和“文本”數據類型兼容。

 

聯合查詢是特定於 SQL 的。特定於 SQL 的查詢不能在“設計”視圖中顯示,因此必須直接用 SQL 編寫。在 Microsoft office Access 2007 中,您可以使用“SQL 視圖”對象選項卡編寫特定於 SQL 的查詢,包括聯合查詢。

 提示   每個查詢都可以用 SQL 語句來表達。此外,大多數查詢也可以在查詢設計網格 (設計網格:在查詢設計視圖或“高級篩選/排序”窗口中設計查詢或篩選時所用的網格。對於查詢,該網格以前稱為“QBE 網格”。)中表達,如果此環境可用,構建查詢將更加輕松。在使用設計網格創建查詢時,您始終都可以切換到 SQL 視圖,以查看運行查詢時所處理的 SQL 語句。在 SQL 視圖中查看查詢是一種很好的做法,因為您可以通過此途徑熟悉 SQL 並加深對查詢工作方式的理解。在某些情況下,您還可以使用 SQL 視圖對未返回預期結果的查詢進行故障排除。

聯合查詢的 SQL 語法

在聯合查詢中,每個選擇查詢(又稱為 Select 語句)都有一個 SELECT 子句和 FROM 子句,還可能有 WHERE 子句。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 子句。FROM 子句跟在 SELECT 子句之後,二者共同構成了一個基本的 Select 語句。FROM 後也跟有一個標識符列表,用於指示哪些表包含 SELECT 子句中列出的字段。FROM 子句必須始終至少列出一個表。此 FROM 子句列出了表標識符 Products
  • UNION ALL  這是一個 UNION 關鍵字以及一個可選的 ALL 關鍵字。UNION 指示將 UNION 前後的 SELECT 語句的結果合並在一起。

    在使用 ALL 關鍵字時,Union 生成的合並集中並不刪除重復行。這樣,Access 便無需檢查重復行的結果,從而可以顯著提高查詢的性能。如果滿足下列任一條件,則應使用 ALL 關鍵字:

    • 您確定選擇查詢不會生成任何重復行。
    • 結果中是否存在重復行無關緊要。
    • 您希望查看重復行。

     

    在本示例中,我們使用 ALL 關鍵字是因為我們既不期望會返回重復行,也沒有略去它們的必要。

  • SELECT name, price, guarantee_available, exclusive_offer  這是第二個 SELECT 子句,用於引入聯合查詢中的第二個 SELECT 語句。在編寫聯合查詢時,各個 SELECT 語句中的字段必須相互對應,這意味著各個 SELECT 語句必須具有相同的字段數,並且共享通用數據的字段必須以相同的順序出現在子句中,同時這些字段必須具有相同或兼容的數據類型,如示例中所示。只有這些字段相互對應,才能在查詢輸出中將它們合並在一起。

     注釋   聯合查詢輸出中的字段名稱從第一個 SELECT 子句中提取。因此,在本示例的查詢輸出中,來自字段“warranty_available”和“guarantee_available”的數據將被命名為“warranty_available”。

  • FROM Services  這是第二個 FROM 子句,用於完成聯合查詢中的第二個 SELECT 語句。與 SELECT 子句中的字段不同,聯合查詢對 FROM 子句沒有表限制。您既可以創建在每個 FROM 子句中都使用相同的表的聯合查詢,也可以在 FROM 子句中使用不同數目的表。在我們的示例中,每個 FROM 子句都只有一個表。

 

創建聯合查詢

創建聯合查詢有兩種基本方法:

  • 先在查詢“設計”視圖 (設計視圖:顯示數據庫對象(包括:表、查詢、窗體、宏和數據訪問頁)的設計的窗口。在設計視圖中,可以新建數據庫對象和修改現有數據庫對象的設計。)中創建各個組件選擇查詢,然後將這些查詢合並為一個聯合查詢。
  • 直接在 SQL 視圖 (SQL 視圖:用於顯示當前查詢的 SQL 語句或用於創建 SQL 特有查詢(聯合查詢、傳遞查詢或數據定義查詢)的窗口。在設計視圖中創建查詢時,Access 會在 SQL 視圖中構建 SQL 的等價查詢。)中創建整個聯合查詢。

在大多數情況下,您都應該先創建選擇查詢,然後再將它們合並為一個聯合查詢。在 Office Access 2007 中,“設計”視圖提供了一種易用的創建選擇查詢的圖形用戶界面,您可以復制這些查詢的 SQL 語句並將它們粘貼到聯合查詢中。

但是,如果您認為編寫 SQL 語句得心應手,或者希望獲得更多的 SQL 編寫體驗,則可能更傾向於直接在 SQL 視圖中創建聯合查詢。


先在“設計”視圖中創建選擇查詢,然後合並它們

按照此方法,將先使用“設計”視圖創建每個選擇查詢,然後使用 SQL 視圖合並選擇查詢。

在“設計”視圖中創建每個選擇查詢

  1. “創建”選項卡上的“其他”組中,單擊“查詢設計”
  2. “顯示表”對話框中,雙擊要包括的字段所在的表。

    這會將該表添加到查詢設計窗口。

     注釋   雖然您可以在選擇查詢中包括多個表或查詢,但此過程假定每個選擇查詢只包括一個表中的數據。

  3. 關閉“顯示表”對話框。
  4. 在查詢設計窗口中,雙擊要包括的每個字段。

    選擇字段時,請確保您在其他選擇查詢中以相同順序添加了相同數目的字段。另外,請注意各個字段的數據類型,確保在要合並的其他查詢中,處於相應位置的字段具有兼容的數據類型。

    例如,如果第一個選擇查詢具有五個字段,且第一個字段包含“日期/時間”數據,請確保要合並的其他每個選擇查詢也具有五個字段,並且第一個字段同樣包含“日期/時間”數據,依此類推。

  5. 另外,您還可以在字段網格的“條件”行中鍵入適當的表達式 (
copyright © 萬盛學電腦網 all rights reserved