對於多個相似的選擇查詢,當您希望將它們返回的所有數據一起作為一個合並的集合查看時,便可以使用聯合查詢。
本文將向您介紹如何根據兩個或多個現有的選擇查詢創建聯合查詢,同時說明如何使用結構化查詢語言 (SQL) 編寫聯合查詢。
為完成本文中的示例,您應該對如何創建和運行選擇查詢有基本的了解。有關如何創建選擇查詢的詳細信息,請參閱請參閱部分中的鏈接。
本文內容聯合查詢可合並多個相似的選擇查詢的結果集。
例如,假設您有兩個表,一個用於存儲有關客戶的信息,另一個用於存儲有關供應商的信息,並且這兩個表之間不存在任何關系。又假設這兩個表都有一些存儲聯系人信息的字段,而您希望同時查看這兩個表中的所有聯系人信息。
您可以為每個表都創建一個選擇查詢 (選擇查詢:就表中存儲的數據提出問題,然後在不更改數據的情況下以數據表的形式返回一個結果集。),以便只檢索包含聯系人信息的那些字段,但返回的信息仍將位於兩個單獨的位置。要將兩個或多個選擇查詢的結果合並到一個結果集中,可以使用聯合查詢。
聯合查詢中合並的選擇查詢必須具有相同的輸出字段數、采用相同的順序並包含相同或兼容的數據類型。在運行聯合查詢時,來自每組相應字段中的數據將合並到一個輸出字段中,這樣查詢輸出所包含的字段數將與每個 Select 語句相同。
注釋 根據聯合查詢的目的,“數字”和“文本”數據類型兼容。
聯合查詢是特定於 SQL 的。特定於 SQL 的查詢不能在“設計”視圖中顯示,因此必須直接用 SQL 編寫。在 Microsoft office Access 2007 中,您可以使用“SQL 視圖”對象選項卡編寫特定於 SQL 的查詢,包括聯合查詢。
提示 每個查詢都可以用 SQL 語句來表達。此外,大多數查詢也可以在查詢設計網格 (設計網格:在查詢設計視圖或“高級篩選/排序”窗口中設計查詢或篩選時所用的網格。對於查詢,該網格以前稱為“QBE 網格”。)中表達,如果此環境可用,構建查詢將更加輕松。在使用設計網格創建查詢時,您始終都可以切換到 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;
讓我們逐行檢查上面的語法示例。
在使用 ALL 關鍵字時,Union 生成的合並集中並不刪除重復行。這樣,Access 便無需檢查重復行的結果,從而可以顯著提高查詢的性能。如果滿足下列任一條件,則應使用 ALL 關鍵字:
在本示例中,我們使用 ALL 關鍵字是因為我們既不期望會返回重復行,也沒有略去它們的必要。
注釋 聯合查詢輸出中的字段名稱從第一個 SELECT 子句中提取。因此,在本示例的查詢輸出中,來自字段“warranty_available”和“guarantee_available”的數據將被命名為“warranty_available”。
創建聯合查詢有兩種基本方法:
在大多數情況下,您都應該先創建選擇查詢,然後再將它們合並為一個聯合查詢。在 Office Access 2007 中,“設計”視圖提供了一種易用的創建選擇查詢的圖形用戶界面,您可以復制這些查詢的 SQL 語句並將它們粘貼到聯合查詢中。
但是,如果您認為編寫 SQL 語句得心應手,或者希望獲得更多的 SQL 編寫體驗,則可能更傾向於直接在 SQL 視圖中創建聯合查詢。
按照此方法,將先使用“設計”視圖創建每個選擇查詢,然後使用 SQL 視圖合並選擇查詢。
這會將該表添加到查詢設計窗口。
注釋 雖然您可以在選擇查詢中包括多個表或查詢,但此過程假定每個選擇查詢只包括一個表中的數據。
選擇字段時,請確保您在其他選擇查詢中以相同順序添加了相同數目的字段。另外,請注意各個字段的數據類型,確保在要合並的其他查詢中,處於相應位置的字段具有兼容的數據類型。
例如,如果第一個選擇查詢具有五個字段,且第一個字段包含“日期/時間”數據,請確保要合並的其他每個選擇查詢也具有五個字段,並且第一個字段同樣包含“日期/時間”數據,依此類推。