1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        SQL中的集合

        共 2157字,需瀏覽 5分鐘

         ·

        2021-09-02 16:34

        點(diǎn)擊關(guān)注上方“SQL數(shù)據(jù)庫(kù)開發(fā)”,

        設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨
        SQL專欄
        SQL基礎(chǔ)知識(shí)第二版
        SQL高級(jí)知識(shí)第二版

        集合的定義

        集合是由一個(gè)和多個(gè)元素構(gòu)成的整體,在SQL Server中的表就代表著事實(shí)集合,而其中的查詢就是在集合的基礎(chǔ)上生成的結(jié)果集。SQL Server的集合包括交集(INTERSECT),并集(UNION),差集(EXCEPT)。


        交集INTERSECT

        可以對(duì)兩個(gè)或多個(gè)結(jié)果集進(jìn)行連接,形成“交集”。返回左邊結(jié)果集和右邊結(jié)果集中都有的記錄,且結(jié)果不重復(fù)(這也是集合的主要特性)


        交集限制條件

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

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

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

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


        交集示例

        我們用以下兩個(gè)表中的數(shù)據(jù)作為示例

        取以上兩個(gè)表的交集,我們可以這樣寫SQL

        SELECT * FROM  City1 
        INTERSECT
        SELECT * FROM  City2

        結(jié)果如下:

        其中北京和上海是上面兩個(gè)表共有的結(jié)果集。

        這和我們的內(nèi)連接(INNER JOIN)有點(diǎn)類似,以上SQL也可以這樣寫

        SELECT c1.* FROM City1 c1
        INNER JOIN City2 c2
        ON c1.Cno=c2.Cno AND c1.Name=c2.Name

        結(jié)果與上面結(jié)果相同。            


        并集UNION

        可以對(duì)兩個(gè)或多個(gè)結(jié)果集進(jìn)行連接,形成“并集”。子結(jié)果集所有的記錄組合在一起形成新的結(jié)果集。其中使用UNION可以得到不重復(fù)(去重)的結(jié)果集,使用UNION ALL可能會(huì)得到重復(fù)(不去重)的結(jié)果集。

        并集限制條件

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

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

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

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


        UNION示例

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

        SELECT * FROM  City1 
        UNION 
        SELECT * FROM  City2

        結(jié)果如下:

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


        UNION ALL示例

        我們?cè)倏纯词褂肬NION ALL會(huì)怎么樣?

        SELECT * FROM  City1 
        UNION ALL
        SELECT * FROM  City2

        結(jié)果如下:

        與上面的UNION相比,UNION ALL僅僅是對(duì)兩個(gè)表作了拼接而已,北京和上海依然在下面重復(fù)出現(xiàn)了,而且細(xì)心的讀著應(yīng)該發(fā)現(xiàn)了,UNION還會(huì)對(duì)結(jié)果進(jìn)行排序,而UNION ALL不會(huì)。


        差集EXCEPT

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


        差集限制條件

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

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

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

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


        差集示例

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

        SELECT * FROM  City1 
        EXCEPT
        SELECT * FROM  City2

        結(jié)果如下:

        我們看到,因?yàn)楸本┖蜕虾T趦蓚€(gè)表都存在,差集為了只顯示左表中有的,而右表中沒有的,就把這兩個(gè)給過濾掉了。


        此外我們常說(shuō)的關(guān)聯(lián)條件其實(shí)也是集合的一種,是通過子表的笛卡爾積按不同的關(guān)聯(lián)條件過濾之后得到的結(jié)果集。有興趣的同學(xué)可以閱讀一下《Microsoft SQL SERVER 2008技術(shù)內(nèi)幕 T-SQL查詢》,這本書中有關(guān)于集合論的具體闡述。


        總結(jié)

        集合是我們數(shù)據(jù)處理過程中的理論基礎(chǔ),可以通過集合的觀點(diǎn)去很好的理解不同的查詢語(yǔ)句。每一個(gè)物理表就是一個(gè)集合,當(dāng)我們要對(duì)表進(jìn)行操作的時(shí)候,將它們看成對(duì)集合的操作就很好理解了。


        最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識(shí)第二版》《SQL高級(jí)知識(shí)第二版》的PDF電子版。里面有各個(gè)語(yǔ)法的解釋、大量的實(shí)例講解和批注等等,非常通俗易懂,方便大家跟著一起來(lái)實(shí)操。

        有需要的讀者可以下載學(xué)習(xí),在下面的公眾號(hào)「數(shù)據(jù)前線」(非本號(hào))后臺(tái)回復(fù)關(guān)鍵字:SQL,就行
        數(shù)據(jù)前線


        后臺(tái)回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨

        后臺(tái)回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。


        推薦閱讀
        瀏覽 65
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            三级影片免费观看 | 黄色国产一级视频 | 天堂а在线中文在线新版 | 777爽视频| 一区二区三区在线播放 | 一级少妇全黄性色生活片 | 91精品国产麻豆国产自产在线 | 欧美性爱视频区 | 正在播放极品女神在酒店 | 调教自虐极限露出小说 |