組合查詢中union 與union all的區別

       在SQL中所提供的幾種運算符允許組合多個SQL查詢來實現,如union、union all、intersect和difference。 在使用這些運算符時,從一個表中獲取的數據必須和其他表中的數據具有相同的列數目,同時兩個表中相對應的列必須具有相同的數據類型或者至少兩個數據類型之間必須存在可能的隱形數據轉化,或者是顯式轉化。爲了能更好的理解這些運算符,主要區別一下union和union all 兩者之間關係。

        通常情況下,union(即聯合)的結果集列名與union 運算符中第一個select  語句的結果集中的列名相同,另一個select語句的結果集列名被忽略了。如在兩個表professor表和student表中,我們運行下列命令:

select professorid,pro_name from professor union select studentid,stu_name from student

其結果集爲:

professorid  pro_name

1 pro.dawson
1 李學思
2 pro.williams
2 張峯
3 pro.ashby
3 王俊
4 pro.patel
4 郝眼
5 pro.jones
5 李俊平
6 pro.hwa
6 林俊杰
7 吳麗麗
8 陳麗君
9 歐陽海
10 孫勝利
11 吳文傑
12 勾西平
23 hhg

       雖然上面的舉例很直觀,但是在集合理論中,兩個數據集聯合後包括包含每個數據的每個成員,但是每個成員只被計數一次。

{1,2,3,4} union {3,4,5,6},其結果爲:{1,2,3,4,5,6}

       與之相不同的union all 則是保留重複行,換句話講,此運算符返回每個數據集的所有成員,而不考慮重複。比如:同樣在兩個表professor表和student表中,我們運行下列命令:

select professorid,pro_name from professor union  all select studentid,stu_name from student

其結果集爲:

professorid  pro_name

1 pro.dawson
2 pro.williams
3 pro.ashby
4 pro.patel
5 pro.jones
6 pro.hwa
1 李學思
2 張峯
3 王俊
4 郝眼
5 李俊平
6 林俊杰
7 吳麗麗
8 陳麗君
9 歐陽海
10 孫勝利
11 吳文傑
12 勾西平
23 hhg

       更直觀的比方說{1,2,3,4} union all {3,4,5,6} ,其結果爲:{1,2,3,3,4,4,5,6}

       簡單的提示一下,sql中的intersect運算符允許僅返回在兩個查詢都出現的行,相當於數學上所學的交集。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章