1、大多數的SQL查詢只包含從一個或多個表中返回數據的單條SELECT語句,但是,SQL也允許執行多個查詢(多條SELECT語句),並將結果作為一個查詢結果集返回。這些組合查詢通常稱為並或復合查詢。
主要有兩種情況需要使用組合查詢:
(1)在一個查詢中從不同的表返回結構數據
(2)對一個執行多個查詢,按一個查詢返回數據
2、使用UNION
使用UNION很簡單,所要做的只是給出每條SELECT語句,然后再每條SELECT語句之間加上UNION關鍵字,這樣所給出的SELECT結果集就能組合成一個結果集並返回。代碼如下:
select * from dbo.Customers_1
現在有個需求,需要檢索出位於浙江和上海,或者顧客名稱為Fun4All的所有顧客,下面是通過WhERE子句完成的解決代碼:
select * from dbo.Customers_1 where Province in('浙江','上海') or Company='Fun4All'

ok,通過Where子句的OR操作符完成需求!
下面通過組合查詢UNION操作符來完成需求,代碼如下:
select * from dbo.Customers_1 where Province in('浙江','上海') select * from dbo.Customers_1 where Company='Fun4All'
這是沒有使用UNION的單獨查詢,一共有6條記錄,如果是普通的結果集組合的話會出現6條記錄,我們發現其中有兩條記錄是重復的
在看使用了UNION組合查詢關鍵字的查詢解決代碼:
select * from dbo.Customers_1 where Province in('浙江','上海') UNION select * from dbo.Customers_1 where Company='Fun4All'

ok,完成需求,通過和上面沒有使用UNION關鍵的分開查詢相比,我們發現UNION(組合查詢)從結果集中去除了重復的行。
這里我們可以使用UNION ALL,告訴DBMS不取消重復的行。那么效果就和上面沒加UNION的一樣
3、總結
分析上面完成需求的連個例子,我們發現對於上面的簡單的例子使用UNION似乎比WHERE子句更加的復雜。但是這里你需要知道,如果對於較復雜的過濾條件,或者從多個表(而不是一個表)中檢索數據的情形,使用UNION可能會使處理更加的簡單。
4、使用UNION必須知道的規則(使用注意事項)
(1)使用UNION必須有兩條或者兩條以上的SELECT語句組成,語句之間用UNION關鍵字分割
(2)使用UNION關聯的每個子查詢必須包含相同的檢索列、表達式或這聚集函數(次序可以不一樣)
(3)列數據類型必須兼容;類型不必完全相同,但必須是DBMS可以隱含轉換的類型(不同的數值類型或者不同的日期類型)
(4)UNION幾乎總是完成與多個WHERE條件相同的工作,UNION ALL是UNION的一種形式,它完成WHERE子句完成不了的工作,因為他將返回每個條件的匹配行(包括重復行)
(5)使用組合查詢,當需要對結果進行排序是,只能指定一條Order By語句,這條語句只能放在最后一天SELECT語句的后面.
