共計 1382 個字符,預計需要花費 4 分鐘才能閱讀完成。
丸趣 TV 小編給大家分享一下 MySQL 中 SELECT 執行順序的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
SELECT 語句的完整語法為:
(7) SELECT
(8) DISTINCT select_list
(1) FROM left_table
(3) join_type JOIN right_table
(2) ON join_condition
(4) WHERE where_condition
(5) GROUP BY group_by_list
(6) HAVING having_condition
(9) ORDER BY order_by_condition
(10) LIMIT limit_number
說明:語法前面的序號為 SELECT 執行順序
MySQL 的 SELECT 執行順序一共分為 10 步,如上所標注的那樣,最先執行的是 FROM 操作,最后執行的是 LIMIT 操作。其中每一次操作都會產生一張虛擬的表,這個虛擬的表作為一個處理的輸入,只是這些虛擬的表對用戶來說是透明的,但是只有最后一個虛擬的表才會被作為結果返回。如果沒有在語句中指定某一個子句,那么將會跳過相應的步驟。
下面我們來具體分析一下查詢處理的每一個階段
SELECT a.customer_id, COUNT(b.order_id) as total_orders
FROM table1 AS a
LEFT JOIN table2 AS b
ON a.customer_id = b.customer_id
WHERE a.city = hangzhou
GROUP BY a.customer_id
HAVING count(b.order_id) 2
ORDER BY total_orders DESC;
1、FORM: 對 FROM 左邊的表和右邊的表計算笛卡爾積,產生虛表 VT1。
2、ON: 對虛表 VT1 進行 ON 過濾,只有那些符合 join-condition 的行才會被記錄在虛表 VT2 中。
3、JOIN:如果指定了 OUTER JOIN(比如 left join、right join),那么保留表中未匹配的行就會作為外部行添加到虛擬表 VT2 中,產生虛擬表 VT3。
4、WHERE:對虛擬表 VT3 進行 WHERE 條件過濾。只有符合 where-condition 的記錄才會被插入到虛擬表 VT4 中。
5、GROUP BY: 根據 group by 子句中的列,對 VT4 中的記錄進行分組操作,產生 VT5。
6、HAVING:對虛擬表 VT5 應用 having 過濾,只有符合 having-condition 的記錄才會被 插入到虛擬表 VT6 中。
7、SELECT:執行 select 操作,選擇指定的列,插入到虛擬表 VT7 中。
8、DISTINCT:對 VT7 中的記錄進行去重。產生虛擬表 VT8.
9、ORDER BY: 將虛擬表 VT8 中的記錄按照 order_by_list 進行排序操作,產生虛擬表 VT9.
10、LIMIT:取出指定行的記錄,產生虛擬表 VT10, 并將結果返回。
以上是“MySQL 中 SELECT 執行順序的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!