爲了配合測試,特意建了兩個表,而且添加了一些測試數據,其中重複記錄爲東吳的人物。測試
表:Person_1魏國人物code
表:Person_2蜀國人物blog
A、Union造成並集排序
Union能夠對兩個或多個結果集進行鏈接,造成「並集」。子結果集全部的記錄組合在一塊兒造成新的結果集。io
一、限定條件class
要是用Union來鏈接結果集,有4個限定條件。select
(1)、子結果集要具備相同的結構。數據類型
(2)、字結果集的列數必須相同。語法
(3)、子結果集對應的數據類型必須能夠兼容。nio
(4)、每一個子結果集不能包含order by和compute子句。
二、語法形式
select_statement union [all] select_statement
all表明最終的結果集中將包含全部的行,而不能刪除重複行。
示例:
SELECT Name FROM Person_1 UNION SELECT Name FROM Person_2
生成的結果爲:
注意到重複記錄,孫權與周瑜僅僅顯示了一個。下面來將UNION替換成UNION ALL看看是什麼結果:
SELECT Name FROM Person_1 UNION ALL SELECT Name FROM Person_2
注意到重複記錄,孫權與周瑜出現了兩次,這就是UNION ALL 與 UNION的不一樣之處。
B、Except造成差集
Except能夠對兩個或多個結果集進行鏈接,造成「差集」。返回左邊結果集合中已經有的記錄,而右邊結果集中沒有的記錄。
限定條件:
一、子結果集要具備相同的結構。
二、子結果集的列數必須相同。
三、子結果集對應的數據類型必須能夠兼容。
四、每一個子結果集不能包含order by 和 compute子句。
語法形式:
select_statement except select_statement
自動刪除重複行。
示例:
SELECT Name FROM Person_1 EXCEPT SELECT Name FROM Person_2
結果:
留意到表Person_2有的,孫權周瑜已被去除。
C、InterSect造成交集
InterSect能夠對兩個或多個結果集進行鏈接,造成「交集」。返回左邊結果集和右邊結果集中都有的記錄。
一、限定條件
要是用Except來鏈接結果集,有4個限定條件。
(1)、子結果集要具備相同的結構。
(2)、子結果集的列數必須相同。
(3)、子結果集對應的數據類型必須能夠兼容。
(4)、每一個子結果集不能包含order by或compute子句。
二、語法形式
select_statement intersect select_statement
示例:
SELECT Name FROM Person_1 INTERSECT SELECT Name FROM Person_2
返回的結果以下:
留意到只取兩張表都有的記錄(周瑜,孫權),這就是所謂的交集。
D、結果集的排序
SELECT Name FROM Person_1 INTERSECT SELECT Name FROM Person_2 ORDER BY Name DESC --此處的字段名相同了,若是不一樣,請切記排序列名,只可以是第一個表的列名
這裏只有兩點要注意
1.ORDER BY是對整個運算後的結果排序,並非對單個數據集。
2.ORDER BY後面排序的字段名稱是第一個數據集的字段名或者別名。