mysql中Select語句的執(zhí)行順序

我們平時寫sql的時候大家都知道基本該怎么寫,寫的是什么語義邏輯,但是其中select語句每一個關(guān)鍵字的執(zhí)行順序可能大家還有不知道的,今天看到的一個題目,就是問select的執(zhí)行順序;
其實這個過程大概的情況其實可以推理出來的
以下就是基本的推理過程:

1.你要有主表,也就要先執(zhí)行from,這個是根基
2-3.然后輔助表的數(shù)據(jù)關(guān)聯(lián),關(guān)聯(lián)的時候先有join,要連接什么表,然后就有了這么連接on;
這個是要排在group by,order by,where前面的,因為在group,order,where中你可以使用join中的數(shù)據(jù),所以join肯定在前面
4.再然后就是where了,你要獲取的全部數(shù)據(jù)在上面通過from和join都獲取到了,要做第一步篩選,得到你想要的數(shù)據(jù)
5.再之后就是使用Group by進行分組,這個的順序考慮從語義上,你現(xiàn)有你要分組的數(shù)據(jù)才能分組,前面的from,join,where等都是為了確定獲取數(shù)據(jù)的
6.而后的having就是對你分組的數(shù)據(jù)再一次篩選,肯定是要在分組數(shù)據(jù)之后的
7.再往后select排在order by前面是因為order by的數(shù)據(jù)排序是要根據(jù)select中的內(nèi)容來的,平時你可能沒感覺,但是當(dāng)你使用group by分組后,你會發(fā)現(xiàn),select中沒有字段是不能用來排序的,驗證了select在order by之前
8.然后就是order by了對獲取的數(shù)據(jù)進行指定規(guī)則的排序,前面的過程都完成才能對總數(shù)據(jù)進行排序,否則也沒法排序
9.limit排在最后原因是,limit是要獲取當(dāng)前數(shù)據(jù)中指定范圍內(nèi)的數(shù)據(jù),所以數(shù)據(jù)要先有序才能進行指定范圍內(nèi)數(shù)據(jù)獲取,所以limit要在orderby之后

1 from->2 join->3 on->4 where->5 group by ->6 having ->7 select->8 order by->9 limit

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容