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 的執(zhí)行順序

        共 2183字,需瀏覽 5分鐘

         ·

        2022-09-15 22:40

        6564e8c8e9029f3ef277402e9221de31.webp程序員的成長(zhǎng)之路互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享? 關(guān)注


        閱讀本文大概需要 2.8 分鐘。

        來自:blog.csdn.net/weixin_44141495/article/details/108744720

        這是一條標(biāo)準(zhǔn)的查詢語(yǔ)句:

        d81916fb34cf055dea9dde4ffb1ade8c.webp

        這是我們實(shí)際上SQL執(zhí)行順序:
        • 我們先執(zhí)行from,join來確定表之間的連接關(guān)系,得到初步的數(shù)據(jù)
        • where對(duì)數(shù)據(jù)進(jìn)行普通的初步的篩選
        • group by 分組
        • 各組分別執(zhí)行having中的普通篩選或者聚合函數(shù)篩選。
        • 然后把再根據(jù)我們要的數(shù)據(jù)進(jìn)行select,可以是普通字段查詢也可以是獲取聚合函數(shù)的查詢結(jié)果,如果是集合函數(shù),select的查詢結(jié)果會(huì)新增一條字段
        • 將查詢結(jié)果去重distinct
        • 最后合并各組的查詢結(jié)果,按照order by的條件進(jìn)行排序
        a0b939855151268829fe0ce61c2d0a55.webp

        數(shù)據(jù)的關(guān)聯(lián)過程

        數(shù)據(jù)庫(kù)中的兩張表4d5688839c02b8ca9bdfdfaba5d8b4c7.webp

        from&join&where

        用于確定我們要查詢的表的范圍,涉及哪些表。選擇一張表,然后用join連接
            from?table1?join?table2?on?table1.id=table2.id
        選擇多張表,用where做關(guān)聯(lián)條件
            from?table1,table2?where?table1.id=table2.id
        我們會(huì)得到滿足關(guān)聯(lián)條件的兩張表的數(shù)據(jù),不加關(guān)聯(lián)條件會(huì)出現(xiàn)笛卡爾積。74d3670c6d63055729d00452e44d33d3.webp

        group by

        按照我們的分組條件,將數(shù)據(jù)進(jìn)行分組,但是不會(huì)篩選數(shù)據(jù)。比如我們按照即id的奇偶分組b99de2596d44e004a1afd898af0043f0.webp

        having&where

        having中可以是普通條件的篩選,也能是聚合函數(shù)。而where只能是普通函數(shù),一般情況下,有having可以不寫where,把where的篩選放在having里,SQL語(yǔ)句看上去更絲滑。
        使用where再group by
        先把不滿足where條件的數(shù)據(jù)刪除,再去分組
        使用group by再having
        先分組再刪除不滿足having條件的數(shù)據(jù),這兩種方法有區(qū)別嗎,幾乎沒有!舉個(gè)例子:100/2=50,此時(shí)我們把100拆分(10+10+10+10+10…)/2=5+5+5+…+5=50,只要篩選條件沒變,即便是分組了也得滿足篩選條件,所以where后group by 和group by再having是不影響結(jié)果的!不同的是,having語(yǔ)法支持聚合函數(shù),其實(shí)having的意思就是針對(duì)每組的條件進(jìn)行篩選。我們之前看到了普通的篩選條件是不影響的,但是having還支持聚合函數(shù),這是where無法實(shí)現(xiàn)的。當(dāng)前數(shù)據(jù)分組情況

        b99de2596d44e004a1afd898af0043f0.webp

        執(zhí)行having的篩選條件,可以使用聚合函數(shù)。篩選掉工資小于各組平均工資的having salary<avg(salary)a3377af7c9175ebef44a39bf6382ad67.webp

        select

        分組結(jié)束之后,我們?cè)賵?zhí)行select語(yǔ)句,因?yàn)榫酆虾瘮?shù)是依賴于分組的,聚合函數(shù)會(huì)單獨(dú)新增一個(gè)查詢出來的字段,這里用紫色表示,這里我們兩個(gè)id重復(fù)了,我們就保留一個(gè)id,重復(fù)字段名需要指向來自哪張表,否則會(huì)出現(xiàn)唯一性問題。最后按照用戶名去重。
            select?employee.id,distinct?name,salary,?avg(salary)

        5082fe487cb1b4be15cc24e42c41cb1c.webp

        將各組having之后的數(shù)據(jù)再合并數(shù)據(jù)。4e1733907a0d9e0778d310ffebcb9ec3.webp

        order by

        最后我們執(zhí)行order by 將數(shù)據(jù)按照一定順序排序,比如這里按照id排序。如果此時(shí)有l(wèi)imit那么查詢到相應(yīng)的我們需要的記錄數(shù)時(shí),就不繼續(xù)往下查了。7c833e0005224e51ec9a9889cbc37bee.webp

        limit

        記住limit是最后查詢的,為什么呢?假如我們要查詢年級(jí)最小的三個(gè)數(shù)據(jù),如果在排序之前就截取到3個(gè)數(shù)據(jù)。實(shí)際上查詢出來的不是最小的三個(gè)數(shù)據(jù)而是前三個(gè)數(shù)據(jù)了,記住這一點(diǎn)。我們?nèi)绻鹟imit 0,3竊取前三個(gè)數(shù)據(jù)再排序,實(shí)際上最少工資的是2000,3000,4000。你這里只能是4000,5000,8000了。b473b54b20551d95f58db4def7ef15bd.webp<END>

        推薦閱讀:

        潤(rùn)了!大齡碼農(nóng)從北京到荷蘭的躺平生活

        來了,MyBatisPlus的join聯(lián)表查詢!

            
                互聯(lián)網(wǎng)初中高級(jí)大廠面試題(9個(gè)G)
              
            

        內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊(duì)列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper......等技術(shù)棧!

        ?戳閱讀原文領(lǐng)??! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??朕已閱? e4f67648988789c8d412a0474767d25f.webp

        瀏覽 51
        點(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>
            做爱在线观看视频在线观看 | 国内体内she精视频免费 | 日韩一区二区不卡 | 欧美校园春色 | 日韩中文欧美 | 五月天婷婷丁香花 | 嗯灬用力灬高潮了灬快灬啊 | 男生把女生捅到爽 | milky牝教师~淫辱の教室 | 色丁香大香蕉 |