集合

1 集合的定義

集合是由一個和多個元素構(gòu)成的整體,在 SQL Server 中的就代表著事實集合,

而其中的查詢就是在集合的基礎(chǔ)上生成的結(jié)果集。SQL Server 的集合包括交集

(INTERSECT),并集(UNION),差集( EXCEPT )。

2 交集 INTERSECT

可以對兩個或多個結(jié)果集進(jìn)行連接,形成“交集”。返回左邊結(jié)果集和右邊結(jié)果集中

都有的記錄,且結(jié)果不重復(fù)(這也是集合的主要特性)

交集限制條件

? 子結(jié)果集要具有相同的結(jié)構(gòu)。

? 子結(jié)果集的列數(shù)必須相同

? 子結(jié)果集對應(yīng)的數(shù)據(jù)類型必須可以兼容。

? 每個子結(jié)果集不能包含 order by 和 compute 子句。

3 并集 UNION

可以對兩個或多個結(jié)果集進(jìn)行連接,形成“并集”。子結(jié)果集所有的記錄組合在一起

形成新的結(jié)果集。其中使用 UNION 可以得到不重復(fù)(去重)的結(jié)果集,使用

UNION ALL 可能會得到重復(fù)(不去重)的結(jié)果集。

并集限制條件

? 子結(jié)果集要具有相同的結(jié)構(gòu)。

? 子結(jié)果集的列數(shù)必須相同

? 子結(jié)果集對應(yīng)的數(shù)據(jù)類型必須可以兼容。

? 每個子結(jié)果集不能包含 order by 和 compute 子句。

UNION 示例

還是以上面的 City1 和 City2 為例,取兩個表的并集,我們可以這樣寫 SQL:

SELECT * FROM City1

UNION

SELECT * FROM City2

結(jié)果如下:

我們看到,北京和上海去掉了重復(fù)的記錄,只保留了一次

UNION ALL 示例

我們再看看使用 UNION ALL 會怎么樣?

SELECT * FROM City1

UNION ALL

SELECT * FROM City2

結(jié)果如下:

與上面的 UNION 相比,UNION ALL 僅僅是對兩個表作了拼接而已,北京和上海

依然在下面重復(fù)出現(xiàn)了,而且細(xì)心的讀著應(yīng)該發(fā)現(xiàn)了,UNION 還會對結(jié)果進(jìn)行排

序,而 UNION ALL 不會。

4 差集 EXCEPT

可以對兩個或多個結(jié)果集進(jìn)行連接,形成“差集”。返回左邊結(jié)果集合中已經(jīng)有的記

錄,而右邊結(jié)果集中沒有的記錄。

差集限制條件

? 子結(jié)果集要具有相同的結(jié)構(gòu)。

? 子結(jié)果集的列數(shù)必須相同

? 子結(jié)果集對應(yīng)的數(shù)據(jù)類型必須可以兼容。

? 每個子結(jié)果集不能包含 order by 和 compute 子句。

差集示例

以 City1 和 City2 為例,我們想取 City1(左表)和 City2(右表)的差集,可以

這樣寫 SQL:

SELECT * FROM City1

EXCEPT

SELECT * FROM City2

結(jié)果如下:

我們看到,因為北京和上海在兩個表都存在,差集為了只顯示左表中有的,而右表

中沒有的,就把這兩個給過濾掉了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容