UNION並集運算


  在集合論中,兩個集合(集合A和集合B)的並集是一個包含集合A和B中所有元素的集合。換句話說,如果一個元素屬於任何一個輸入集合,那么它也屬於結果集。如圖所示。

 

  對於集合運算,需要注意以下幾點:

  1. 參與集合運算的兩個查詢生成的結果集必須包含相同的列數,並且相應列必須具有兼容的數據類型。
  2. 集合運算結果中的列名由第一個查詢決定,因此,如果要為結果列分配別名,應該在第一個查詢中分配相應的別名。
  3. 集合運算對行進行比較時,認為兩個NULL值相等。

UNION集合運算分為UNION ALL和UNION DISTINCT兩種情形,它們的區別是UNION ALL會保留重復行,而UNION DISTINCT會刪除重復行。下面用例子來說明。

UNION ALL

UNION ALL合並兩個集合,並保留重復行。關於UNION ALL需要注意以下幾點:

  1. UNION ALL實際上不會對行進行比較,也不會刪除重復行,它只是做個合並的操作而已。
  2. 因為UNION ALL不會刪除重復行,所以它的結果是多集,而不是真正的集合,因為相同的行在結果中可能出現多次。

例如。

SQL查詢代碼:

USE TSQLFundamentals2008;
GO

-- UNION ALL合並兩個集合,並保留重復行
SELECT country,region,city FROM HR.Employees
UNION ALL
SELECT country,region,city FROM Sales.Customers

查詢結果:

UNION DISTINCT

UNION DISTINCT會合並兩個集合,但是它會刪除重復行。對於UNION DISTINCT需要注意以下幾點:

  1. 從處理過程來看,UNION DISTINCT先合並多個集合為多集,再刪除重復行變成集合。
  2. 從運算結果來看,UNION DISTINCT是一個真正的集合,而不是多集。

例如。

SQL查詢代碼:

USE TSQLFundamentals2008;
GO

-- UNION(隱含DISTINCT)合並兩個集合,但會刪除重復行
SELECT country,region,city FROM HR.Employees
UNION
SELECT country,region,city FROM Sales.Customers

查詢結果:

注意:比上面的查詢少了29條記錄,當然這些記錄都是因為重復行被刪除了。

 


免責聲明!

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



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