MySQL 学习笔记(17)— SQL 执行顺序
生活随笔
收集整理的這篇文章主要介紹了
MySQL 学习笔记(17)— SQL 执行顺序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以查詢語句為例,我們看下面的查詢語句:
(6)SELECT [DISTINCT | ALL] col1, col2, agg_func(col3) AS alias
(1) FROM t1 JOIN t2
(2) ON (join_conditions)
(3) WHERE where_conditions
(4) GROUP BY col1, col2
(5)HAVING having_condition
(7) UNION [ALL]...
(8) ORDER BY col1 ASC,col2 DESC
(9)OFFSET m ROWS FETCH NEXT num_rows ROWS ONLY;
以上是 SQL 中各種關鍵字的編寫順序,前面括號內的數字代表了它們的邏輯執行順序。也就是說, SQL 并不是按照編寫順序先執行 SELECT ,然后再執行 FROM 子句。從邏輯上講, SQL 語句的執行順序如下:
- 首先,
FROM和JOIN是SQL語句執行的第一步。它們的邏輯結果是一個笛卡爾積,決定了接下來要操作的數據集。注意邏輯執行順序并不代表物理執行順序,實際上數據庫在獲取表中的數據之前會使用ON和WHERE過濾條件進行優化訪問; - 其次,應用
ON條件對上一步的結果進行過濾并生成新的數據集; - 然后,執行
WHERE子句對上一步的數據集再次進行過濾。WHERE和ON大多數情況下的效果相同,但是外連接查詢有所區別,我們將會在下文給出示例; - 接著,基于
GROUP BY子句指定的表達式進行分組;同時,對于每個分組計算聚合函數 agg_func 的結果。經過GROUP BY處理之后,數據集的結構就發生了變化,只保留了分組字段和聚合函數的結果; - 如果存在
GROUP BY子句,可以利用HAVING針對分組后的結果進一步進行過濾,通常是針對聚合函數的結果進行過濾; - 接下來,
SELECT可以指定要返回的列;如果指定了DISTINCT關鍵字,需要對結果集進行去重操作。另外還會為指定了AS的字段生成別名; - 如果還有集合操作符(
UNION、INTERSECT、EXCEPT)和其他的SELECT語句,執行該查詢并且合并兩個結果集。對于集合操作中的多個SELECT語句,數據庫通常可以支持并發執行; - 然后,應用
ORDER BY子句對結果進行排序。如果存在GROUP BY子句或者DISTINCT關鍵字,只能使用分組字段和聚合函數進行排序;否則,可以使用FROM和JOIN表中的任何字段排序; - 最后,
OFFSET和FETCH(LIMIT、TOP)限定了最終返回的行數。
總結
以上是生活随笔為你收集整理的MySQL 学习笔记(17)— SQL 执行顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原清则流清的下一句是什么啊?
- 下一篇: 都不值到要看什么电影了,推荐电影?