千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 圖解SQL執(zhí)行順序,通俗易懂!

圖解SQL執(zhí)行順序,通俗易懂!

來(lái)源:千鋒教育
發(fā)布人:wjy
時(shí)間: 2023-01-07 11:21:00 1673061660

  圖解 SQL 執(zhí)行順序,通俗易懂!

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

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

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

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

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

  ●group by 分組

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

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

  ●將查詢(xún)結(jié)果去重distinct

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

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

  我們?cè)诶斫釹ELECT語(yǔ)法的時(shí)候,還需要了解SELECT執(zhí)行時(shí)的底層原理。只有這樣,才能讓我們對(duì)SQL有更深刻的認(rèn)識(shí)。

  其中你需要記住SELECT查詢(xún)時(shí)的兩個(gè)順序:

  1.關(guān)鍵字的順序是不能顛倒的:

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

  2.SELECT語(yǔ)句的執(zhí)行順序(在MySQL和Oracle中,SELECT執(zhí)行順序基本相同):

  比如你寫(xiě)了一個(gè)SQL語(yǔ)句,那么它的關(guān)鍵字順序和執(zhí)行順序是下面這樣的:

  在SELECT語(yǔ)句執(zhí)行這些步驟的時(shí)候,每個(gè)步驟都會(huì)產(chǎn)生一個(gè)虛擬表,然后將這個(gè)虛擬表傳入下一個(gè)步驟中作為輸入。需要注意的是,這些步驟隱含在SQL的執(zhí)行過(guò)程中,對(duì)于我們來(lái)說(shuō)是不可見(jiàn)的。

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

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

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

  from&join&where

  用于確定我們要查詢(xún)的表的范圍,涉及哪些表。

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

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

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

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

  group by

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

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

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

  having&where

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

  使用where再group by

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

  使用group by再having

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

  舉個(gè)例子:

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

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

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

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

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

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

  select

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

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

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

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

  order by

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

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

  limit

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

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

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

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專(zhuān)屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
適合三農(nóng)領(lǐng)域的名字?有何技巧?

現(xiàn)在在抖音上很多博主會(huì)選擇直播來(lái)賺取更多的流量以及利潤(rùn),直播間的東西也有很多讓消費(fèi)者信任并且喜歡的,而且隨著越來(lái)越多人直播,很多農(nóng)產(chǎn)品...詳情>>

2023-09-19 07:06:05
抖店商品發(fā)布違規(guī)怎么申訴?有何規(guī)則?

抖店服務(wù)市場(chǎng)服務(wù)商發(fā)布違禁信息如何處理?情節(jié)嚴(yán)重程度判定原則:違規(guī)嚴(yán)重等級(jí)主要通過(guò)服務(wù)商違規(guī)次數(shù)、造成后果的嚴(yán)重程度、獲利或?qū)е聯(lián)p失的...詳情>>

2023-09-19 06:59:55
“泛垂直起號(hào)”可能是2023年最高效的起號(hào)方式

這可能是明年最好用的旗號(hào)方式了,今天教大家一個(gè)很野,但是可以讓你三天漲1000粉的偏方。去年前年啊,每個(gè)人都教你,誰(shuí)知七號(hào)對(duì)著自己的產(chǎn)品拍...詳情>>

2023-09-19 06:37:38
做直播怎么賣(mài)自己的貨怎么上鏈接?能賺錢(qián)嗎?

直播賣(mài)貨是時(shí)下非常火的一個(gè)行業(yè),我們的產(chǎn)品可以放到網(wǎng)上賣(mài),也可以在網(wǎng)上做直播。現(xiàn)在的直播平臺(tái)也是很多的,基本不愁沒(méi)有銷(xiāo)路。如果想要賣(mài)自...詳情>>

2023-09-19 06:28:26
比較適合新手的3個(gè)不用出境的領(lǐng)域

隨著短視頻行業(yè)盛勢(shì)發(fā)展,越來(lái)越多的年輕人也想要投入這行,但又苦于不想出鏡。抖音短視頻 for Android V24.8.0 安卓手機(jī)版類(lèi)型:影音播放大小...詳情>>

2023-09-19 06:06:39
開(kāi)班信息
北京校區(qū)
  • 北京校區(qū)
  • 大連校區(qū)
  • 廣州校區(qū)
  • 成都校區(qū)
  • 杭州校區(qū)
  • 長(zhǎng)沙校區(qū)
  • 合肥校區(qū)
  • 南京校區(qū)
  • 上海校區(qū)
  • 深圳校區(qū)
  • 武漢校區(qū)
  • 鄭州校區(qū)
  • 西安校區(qū)
  • 青島校區(qū)
  • 重慶校區(qū)
  • 太原校區(qū)
  • 沈陽(yáng)校區(qū)
  • 南昌校區(qū)
  • 哈爾濱校區(qū)
久久亚洲中文字幕精品一区四,亚洲日本另类欧美一区二区,久久久久久久这里只有免费费精品,高清国产激情视频在线观看
婷婷丁香五月激情亚洲综合 | 伊人成伊人成综合网222 | 亚洲日韩国产线路一 | 五月天在线视频婷婷播放 | 亚洲免费国产视频 | 亚洲精品第一国产综合精品 |