您好,登錄后才能下訂單哦!
下文內(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í)行順序
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、圖解
對(duì)于以上關(guān)于SQL執(zhí)行順序講析,如果大家還有更多需要了解的可以持續(xù)關(guān)注我們億速云的行業(yè)推新,如需獲取專業(yè)解答,可在官網(wǎng)聯(lián)系售前售后的,希望該文章可給大家?guī)?lái)一定的知識(shí)更新。
免責(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)容。