SQL學習之組合查詢(UNION)


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語句的后面.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM