對於多個相似的選取查詢,當您希望將它們返回的所有資料一起作為一個合并的集合查看時,便可以使用聯集查詢
本文將向您介紹如何根據兩個或多個現有的選取查詢建立聯集查詢,同時說明如何使用結構化查詢語言 (SQL) (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 子句列出了欄位標識符 name、price、warranty_available 和 exclusive_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 子句都只有一個表