SQL讀書筆記(九) UNION

筆記參考自SQL必知必會,寫下讀書時的筆記,方便以後查詢閱讀,也希望能幫到各位道友哦~
利用UNION操作符將多條SELECT語句組合成一個結果集。

UNION其實不難,也就注意幾點就行,UNION ALL包括重複行,而UNION不包含。
很簡單的例子就是,如果有兩個人名字相同但是職業不同,但我們使用UNION輸出所有人時只會輸出其中的一人,而UNION ALL則會全輸出。。

按我的理解什麼時候使用UNION呢,就是我們需要從多個表中去找數據時,就類似我們要統計所有產品的顧客,而產品之間沒有聯繫,自成一張表,我們就需要用UNION來輸出所有的顧客集

主要有兩種情況需要使用組合查詢:
在一個查詢中從不同的表返回結構數據;
對一個表執行多個查詢,按一個查詢返回數據。

多數情況下,組合相同表的兩個查詢所完成的工作與具有多個WHERE子句條件的一個查詢所完成的工作相同。換句話說,任何具有多個WHERE子句的SELECT語句都可以作爲一個組合查詢,在下面可以看到這一點。

舉個例子,假如需要Illinois、Indiana和Michigan等美國幾個州的所有顧客的報表,還想包括不管位於哪個州的所有的Fun4All。當然可以利用WHERE子句來完成此工作,不過這次我們使用UNION。

SELECT cust_name, cust_contact, cust_email FROM Customers WHERE cust_state IN ('IL','IN','MI');
SELECT cust_name, cust_contact, cust_email FROM Customers WHERE cust_name = 'Fun4All';

可以通過兩個查詢語句完成上述步驟

SELECT cust_name, cust_contact, cust_email 
FROM Customers 
WHERE cust_state IN ('IL','IN','MI') 
UNION 
SELECT cust_name, cust_contact, cust_email 
FROM Customers 
WHERE cust_name = 'Fun4All';

這條語句由前面的兩條SELECT語句組成,之間用UNION關鍵字分隔。UNION指示DBMS執行這兩條SELECT語句,並把輸出組合成一個查詢結果集。

SELECT cust_name, cust_contact, cust_email 
FROM Customers 
WHERE cust_state IN ('IL','IN','MI') 
OR cust_name = 'Fun4All';

在這個簡單的例子中,使用UNION可能比使用WHERE子句更爲複雜。但對於較複雜的過濾條件,或者從多個表(而不是一個表)中檢索數據的 情形,使用UNION可能會使處理更簡單。

UNION規則
可以看到,UNION非常容易使用,但在進行組合時需要注意幾條規則。
UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關鍵字UNION分隔(因此,如果組合四條SELECT語句,將要使用三 個UNION關鍵字)。
UNION中的每個查詢必須包含相同的列、表達式或聚集函數(不過,各個列不需要以相同的次序列出)。
列數據類型必須兼容:類型不必完全相同,但必須是DBMS可以隱含轉換的類型(例如,不同的數值類型或不同的日期類型)。 如果遵守了這些基本規則或限制,則可以將UNION用於任何數據檢索操作。

發佈了83 篇原創文章 · 獲贊 68 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章