LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

圖解 SQL 的執(zhí)行順序,優(yōu)雅

admin
2023年10月7日 9:51 本文熱度 669
這是一條標(biāo)準(zhǔn)的查詢語(yǔ)句:

這是我們實(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,可以是普通字段查詢也可以是獲取聚合函數(shù)的查詢結(jié)果,如果是集合函數(shù),select的查詢結(jié)果會(huì)新增一條字段

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

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

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

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

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)笛卡爾積。

group by

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

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

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無(wú)法實(shí)現(xiàn)的。

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

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

select

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

select employee.id,distinct name,salary, avg(salary)

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

order by

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

limit

記住limit是最后查詢的,為什么呢?假如我們要查詢年級(jí)最小的三個(gè)數(shù)據(jù),如果在排序之前就截取到3個(gè)數(shù)據(jù)。實(shí)際上查詢出來(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了。


該文章在 2023/10/7 9:52:00 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
色婷婷缴婷婷5月情综天天 五月婷婷激情六月 | 亚洲国产精品久久久久柚木 | 亚洲欧美日韩中文字幕在线一区 | 在线看又黄又爽成年视频 | 日本在线不卡视频 | 日韩亚洲欧美一二三区 |