久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL中SELECT執行順序的示例分析

139次閱讀
沒有評論

共計 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 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計1382字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 兴隆县| 登封市| 尤溪县| 丹东市| 内黄县| 邳州市| 顺义区| 中牟县| 大埔区| 信宜市| 蓬溪县| 民和| 淮南市| 广水市| 嘉义市| 桃园市| 宝清县| 孙吴县| 都兰县| 惠来县| 商水县| 东阳市| 苗栗县| 德惠市| 阿克陶县| 洞口县| 庐江县| 舞阳县| 桐城市| 桂东县| 崇明县| 财经| 剑川县| 大足县| 金阳县| 漠河县| 德令哈市| 东源县| 建昌县| 金堂县| 汕尾市|