中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL執行順序講析

發布時間:2020-04-27 11:46:04 來源:三月 閱讀:278 作者:三月 欄目:MySQL數據庫

下文內容主要給大家帶來SQL執行順序講析,這里所講到的知識,與書籍略有不同,都是億速云專業技術人員在與用戶接觸過程中,總結出來的,具有一定的經驗分享價值,希望給廣大讀者帶來幫助。

一、手寫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執行順序

SQL執行順序講析

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

三、MySql執行順序理解

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

第二步:篩選關聯表符合on表達式的數據,保留主表,生成虛擬表vt2;

第三步:如果使用的是外連接,執行on的時候,會將主表中不符合on條件的數據也加載進來,做為外部行

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

第五步:執行where表達式,篩選掉不符合條件的數據生成vt4;

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

第七步:執行聚合函數,生成vt6;

第八步:執行having表達式,篩選vt6中的數據。having是唯一一個在分組后的條件篩選,生成vt7;

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

第十步:執行distinct,對vt8去重,生成vt9。其實執行過group by后就沒必要再去執行distinct,因為分組后,每組只會有一條數據,并且每條數據都不相同。

第十一步:對vt9進行排序,此處返回的不是一個虛擬表,而是一個游標,記錄了數據的排序順序,此處可以使用別名;

第十二步:執行limit語句,將結果返回給客戶端

四、其他

1、on和where的區別?

簡單地說,當有外關聯表時,on主要是針對外關聯表進行篩選,主表保留,當沒有關聯表時,二者作用相同。

例如在左外連時,首先執行on,篩選掉外連表中不符合on表達式的數據,而where的篩選是對主表的篩選。

2、圖解

SQL執行順序講析

對于以上關于SQL執行順序講析,如果大家還有更多需要了解的可以持續關注我們億速云的行業推新,如需獲取專業解答,可在官網聯系售前售后的,希望該文章可給大家帶來一定的知識更新。

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌吉市| 墨竹工卡县| 台安县| 五家渠市| 河间市| 大安市| 屏山县| 项城市| 鱼台县| 青田县| 高清| 贵定县| 东乌珠穆沁旗| 桑日县| 巩留县| 尚义县| 文成县| 多伦县| 苏尼特左旗| 黄石市| 邹平县| 南康市| 曲沃县| 灯塔市| 陆良县| 昌都县| 屏山县| 扎鲁特旗| 抚顺市| 丹棱县| 都昌县| 常宁市| 五华县| 茶陵县| 农安县| 巴彦淖尔市| 奎屯市| 南和县| 滁州市| 长岛县| 隆安县|