溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SQL執(zhí)行順序講析

發(fā)布時(shí)間:2020-04-27 11:46:04 來(lái)源:三月 閱讀:274 作者:三月 欄目:MySQL數(shù)據(jù)庫(kù)

下文內(nèi)容主要給大家?guī)?lái)SQL執(zhí)行順序講析,這里所講到的知識(shí),與書籍略有不同,都是億速云專業(yè)技術(shù)人員在與用戶接觸過(guò)程中,總結(jié)出來(lái)的,具有一定的經(jīng)驗(yàn)分享價(jià)值,希望給廣大讀者帶來(lái)幫助。

一、手寫SQL順序

select <select_list>
from <table_name>
<join_type> join <join_table> on <join_condition>
where <where_condition>
group by <group_by_list>
having <having_condition>
order by <order_by_condition>
limit <limt_number>

二、MySql執(zhí)行順序

SQL執(zhí)行順序講析

from <left table>
on <on_condition>
<join_type> join <join_table>
where <where_condition>
group by <group_by_list>
<sum()avg()等聚合函數(shù)>
having <having_condition>
select <select_list>
distinct
order by <order_by_condition>
limit <limit_number>

三、MySql執(zhí)行順序理解

第一步:加載from子句的前兩個(gè)表計(jì)算笛卡爾積,生成虛擬表vt1;

第二步:篩選關(guān)聯(lián)表符合on表達(dá)式的數(shù)據(jù),保留主表,生成虛擬表vt2;

第三步:如果使用的是外連接,執(zhí)行on的時(shí)候,會(huì)將主表中不符合on條件的數(shù)據(jù)也加載進(jìn)來(lái),做為外部行

第四步:如果from子句中的表數(shù)量大于2,則重復(fù)第一步到第三步,直至所有的表都加載完畢,更新vt3;

第五步:執(zhí)行where表達(dá)式,篩選掉不符合條件的數(shù)據(jù)生成vt4;

第六步:執(zhí)行g(shù)roup by子句。group by 子句執(zhí)行過(guò)后,會(huì)對(duì)子句組合成唯一值并且對(duì)每個(gè)唯一值只包含一行,生成vt5,。一旦執(zhí)行g(shù)roup by,后面的所有步驟只能得到vt5中的列(group by的子句包含的列)和聚合函數(shù)。

第七步:執(zhí)行聚合函數(shù),生成vt6;

第八步:執(zhí)行having表達(dá)式,篩選vt6中的數(shù)據(jù)。having是唯一一個(gè)在分組后的條件篩選,生成vt7;

第九步:從vt7中篩選列,生成vt8;

第十步:執(zhí)行distinct,對(duì)vt8去重,生成vt9。其實(shí)執(zhí)行過(guò)group by后就沒(méi)必要再去執(zhí)行distinct,因?yàn)榉纸M后,每組只會(huì)有一條數(shù)據(jù),并且每條數(shù)據(jù)都不相同。

第十一步:對(duì)vt9進(jìn)行排序,此處返回的不是一個(gè)虛擬表,而是一個(gè)游標(biāo),記錄了數(shù)據(jù)的排序順序,此處可以使用別名;

第十二步:執(zhí)行l(wèi)imit語(yǔ)句,將結(jié)果返回給客戶端

四、其他

1、on和where的區(qū)別?

簡(jiǎn)單地說(shuō),當(dāng)有外關(guān)聯(lián)表時(shí),on主要是針對(duì)外關(guān)聯(lián)表進(jìn)行篩選,主表保留,當(dāng)沒(méi)有關(guān)聯(lián)表時(shí),二者作用相同。

例如在左外連時(shí),首先執(zhí)行on,篩選掉外連表中不符合on表達(dá)式的數(shù)據(jù),而where的篩選是對(duì)主表的篩選。

2、圖解

SQL執(zhí)行順序講析

對(duì)于以上關(guān)于SQL執(zhí)行順序講析,如果大家還有更多需要了解的可以持續(xù)關(guān)注我們億速云的行業(yè)推新,如需獲取專業(yè)解答,可在官網(wǎng)聯(lián)系售前售后的,希望該文章可給大家?guī)?lái)一定的知識(shí)更新。

 

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI