RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SQL的執(zhí)行順序圖解

jf_ro2CN3Fa ? 來源:csdn ? 2023-09-16 12:49 ? 次閱讀

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

from&join&where

group by

having&where

select

order by

limit

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

e509d22c-53b0-11ee-a25d-92fbcf53809c.png

這是我們實際上SQL執(zhí)行順序:

我們先執(zhí)行from,join來確定表之間的連接關(guān)系,得到初步的數(shù)據(jù)

where對數(shù)據(jù)進行普通的初步的篩選

group by 分組

各組分別執(zhí)行having中的普通篩選或者聚合函數(shù)篩選。

然后把再根據(jù)我們要的數(shù)據(jù)進行select,可以是普通字段查詢也可以是獲取聚合函數(shù)的查詢結(jié)果,如果是集合函數(shù),select的查詢結(jié)果會新增一條字段

將查詢結(jié)果去重distinct

最后合并各組的查詢結(jié)果,按照order by的條件進行排序

eb1453cc-53b0-11ee-a25d-92fbcf53809c.png

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

數(shù)據(jù)庫中的兩張表

eb5d540a-53b0-11ee-a25d-92fbcf53809c.png

from&join&where

用于確定我們要查詢的表的范圍,涉及哪些表。

選擇一張表,然后用join連接

fromtable1jointable2ontable1.id=table2.id

選擇多張表,用where做關(guān)聯(lián)條件

fromtable1,table2wheretable1.id=table2.id

我們會得到滿足關(guān)聯(lián)條件的兩張表的數(shù)據(jù),不加關(guān)聯(lián)條件會出現(xiàn)笛卡爾積。

eb7739b0-53b0-11ee-a25d-92fbcf53809c.png

group by

按照我們的分組條件,將數(shù)據(jù)進行分組,但是不會篩選數(shù)據(jù)。

比如我們按照即id的奇偶分組

eb918a86-53b0-11ee-a25d-92fbcf53809c.png

having&where

having中可以是普通條件的篩選,也能是聚合函數(shù)。而where只能是普通函數(shù),一般情況下,有having可以不寫where,把where的篩選放在having里,SQL語句看上去更絲滑。

使用where再group by

先把不滿足where條件的數(shù)據(jù)刪除,再去分組

使用group by再having

先分組再刪除不滿足having條件的數(shù)據(jù),這兩種方法有區(qū)別嗎,幾乎沒有!

舉個例子:

100/2=50,此時我們把100拆分(10+10+10+10+10…)/2=5+5+5+…+5=50,只要篩選條件沒變,即便是分組了也得滿足篩選條件,所以where后group by 和group by再having是不影響結(jié)果的!

不同的是,having語法支持聚合函數(shù),其實having的意思就是針對每組的條件進行篩選。我們之前看到了普通的篩選條件是不影響的,但是having還支持聚合函數(shù),這是where無法實現(xiàn)的。

當(dāng)前數(shù)據(jù)分組情況

eb918a86-53b0-11ee-a25d-92fbcf53809c.png

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

ebc315f6-53b0-11ee-a25d-92fbcf53809c.png

select

分組結(jié)束之后,我們再執(zhí)行select語句,因為聚合函數(shù)是依賴于分組的,聚合函數(shù)會單獨新增一個查詢出來的字段,這里用紫色表示,這里我們兩個id重復(fù)了,我們就保留一個id,重復(fù)字段名需要指向來自哪張表,否則會出現(xiàn)唯一性問題。最后按照用戶名去重。

selectemployee.id,distinctname,salary,avg(salary)

ebd4b950-53b0-11ee-a25d-92fbcf53809c.png

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

f1e28674-53b0-11ee-a25d-92fbcf53809c.png

order by

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

f1fff146-53b0-11ee-a25d-92fbcf53809c.png

limit

記住limit是最后查詢的,為什么呢?假如我們要查詢年級最小的三個數(shù)據(jù),如果在排序之前就截取到3個數(shù)據(jù)。實際上查詢出來的不是最小的三個數(shù)據(jù)而是前三個數(shù)據(jù)了,記住這一點。

我們?nèi)绻鹟imit 0,3竊取前三個數(shù)據(jù)再排序,實際上最少工資的是2000,3000,4000。你這里只能是4000,5000,8000了。

f21331c0-53b0-11ee-a25d-92fbcf53809c.png

編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7002

    瀏覽量

    88941
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    762

    瀏覽量

    44117

原文標(biāo)題:圖解 SQL 的執(zhí)行順序,一目了然!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    MySQL的執(zhí)行過程 SQL語句性能優(yōu)化常用策略

    回顧 MySQL 的執(zhí)行過程,幫助介紹如何進行 sql 優(yōu)化。
    的頭像 發(fā)表于 12-12 10:26 ?650次閱讀
    MySQL的<b class='flag-5'>執(zhí)行</b>過程 <b class='flag-5'>SQL</b>語句性能優(yōu)化常用策略

    連接oracle數(shù)據(jù)庫,封裝sql執(zhí)行子vi

    連接oracle數(shù)據(jù)庫,封裝sql執(zhí)行子vi。連接oracle數(shù)據(jù)庫可以安裝oracle客戶端,或者通過odbc的方式去連接。連接后,可通過封裝的子vi,執(zhí)行sql語句。
    發(fā)表于 07-03 12:07

    ARM架構(gòu)應(yīng)用實例01順序執(zhí)行

    ARM嵌入式應(yīng)用程序架構(gòu)設(shè)計實例精講--ARM架構(gòu)應(yīng)用實例01順序執(zhí)行
    發(fā)表于 07-07 18:24 ?3次下載

    ARM應(yīng)用程序構(gòu)架_順序執(zhí)行模板

    ARM嵌入式應(yīng)用程序架構(gòu)設(shè)計實例精講--ARM應(yīng)用程序構(gòu)架01順序執(zhí)行模板
    發(fā)表于 07-08 11:08 ?6次下載

    mfc程序執(zhí)行流程小結(jié),MFC程序的執(zhí)行順序

     摘要:本文章主要以MFC程序的執(zhí)行流程、執(zhí)行順序執(zhí)行過程的剖析做出的結(jié)論,下面一起來看看原文的具體介紹。
    發(fā)表于 12-08 15:48 ?9543次閱讀
    mfc程序<b class='flag-5'>執(zhí)行</b>流程小結(jié),MFC程序的<b class='flag-5'>執(zhí)行</b><b class='flag-5'>順序</b>

    1433端口的SQL TOOL執(zhí)行命令錯誤應(yīng)該如何修復(fù)詳細說明

    然后用SQL TOOLS連接主機,進行SQL或者CMD命令執(zhí)行,從而 得主機的控制權(quán),但是服務(wù)器的管理人員通常會把一些不安全的漏洞補上,所以用sql tools直接
    發(fā)表于 11-22 16:20 ?2次下載

    如何通過explain來驗證sql執(zhí)行順序

    關(guān)于 sql 語句的執(zhí)行順序網(wǎng)上有很多資料,但是大多都沒進行驗證,并且很多都有點小錯誤,尤其是對于 select 和 group by 執(zhí)行的先后
    的頭像 發(fā)表于 09-07 16:24 ?2662次閱讀
    如何通過explain來驗證<b class='flag-5'>sql</b>的<b class='flag-5'>執(zhí)行</b><b class='flag-5'>順序</b>

    一條SQL語句是怎么被執(zhí)行

    一直是想知道一條SQL語句是怎么被執(zhí)行的,它執(zhí)行順序是怎樣的,然后查看總結(jié)各方資料,就有了下面這一篇博文了。 本文將從MySQL總體架構(gòu)---》查詢
    的頭像 發(fā)表于 09-12 09:44 ?1508次閱讀
    一條<b class='flag-5'>SQL</b>語句是怎么被<b class='flag-5'>執(zhí)行</b>的

    sql server執(zhí)行os-shell

    條件:數(shù)據(jù)庫權(quán)限必須是dba權(quán)限可利用sql-shll進行命令執(zhí)行,部分常用ql語句:
    的頭像 發(fā)表于 10-24 17:42 ?2173次閱讀

    系統(tǒng)上線時SQL腳本的9大坑

    有些小公司,SQL腳本是開發(fā)自己執(zhí)行的,有很大的風(fēng)險。 有些大廠,有專業(yè)的DBA把關(guān),但DBA也不是萬能的,還是有可能會讓一些錯誤的SQL腳本被生產(chǎn)環(huán)境執(zhí)行了,比如:update
    的頭像 發(fā)表于 03-24 14:25 ?485次閱讀

    sql執(zhí)行順序優(yōu)先級是什么

    這是我們實際上SQL執(zhí)行順序: 我們先執(zhí)行from,join來確定表之間的連接關(guān)系,得到初步的數(shù)據(jù) where對數(shù)據(jù)進行普通的初步的篩選
    發(fā)表于 08-18 12:37 ?1281次閱讀
    <b class='flag-5'>sql</b><b class='flag-5'>執(zhí)行</b><b class='flag-5'>順序</b>優(yōu)先級是什么

    sql where條件的執(zhí)行順序

    SQL語句中的WHERE條件是用來篩選數(shù)據(jù)的,它決定了哪些數(shù)據(jù)會被返回給用戶。WHERE條件的執(zhí)行順序是影響SQL語句性能的一個重要因素,正確地理解和優(yōu)化WHERE條件的
    的頭像 發(fā)表于 11-23 11:31 ?2194次閱讀

    sql的where條件多個and順序

    SQL中,WHERE子句用于過濾查詢結(jié)果以提供符合特定條件的記錄。當(dāng)有多個AND操作符時,WHERE子句的順序并不會影響查詢結(jié)果,但是正確的AND操作符順序可以提高查詢的可讀性和性能。 首先,我們
    的頭像 發(fā)表于 11-23 11:33 ?3845次閱讀

    oracle執(zhí)行sql查詢語句的步驟是什么

    Oracle數(shù)據(jù)庫是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有強大的SQL查詢功能。Oracle執(zhí)行SQL查詢語句的步驟包括編寫SQL語句、解析SQL
    的頭像 發(fā)表于 12-06 10:49 ?953次閱讀

    Oracle如何執(zhí)行sql腳本文件

    Oracle是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),可用于存儲、查詢和管理大量的數(shù)據(jù)。在Oracle中,可以通過執(zhí)行SQL腳本文件來一次性地執(zhí)行多個SQL語句或者批量處理數(shù)據(jù)。在下面的文章中,我將
    的頭像 發(fā)表于 12-06 10:51 ?6660次閱讀
    RM新时代网站-首页