日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

MySQL 学习笔记(17)— SQL 执行顺序

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 語句的執行順序如下:

  1. 首先, FROMJOINSQL 語句執行的第一步。它們的邏輯結果是一個笛卡爾積,決定了接下來要操作的數據集。注意邏輯執行順序并不代表物理執行順序,實際上數據庫在獲取表中的數據之前會使用 ONWHERE 過濾條件進行優化訪問;
  2. 其次,應用 ON 條件對上一步的結果進行過濾并生成新的數據集;
  3. 然后,執行 WHERE 子句對上一步的數據集再次進行過濾。 WHEREON 大多數情況下的效果相同,但是外連接查詢有所區別,我們將會在下文給出示例;
  4. 接著,基于 GROUP BY 子句指定的表達式進行分組;同時,對于每個分組計算聚合函數 agg_func 的結果。經過 GROUP BY 處理之后,數據集的結構就發生了變化,只保留了分組字段和聚合函數的結果;
  5. 如果存在 GROUP BY 子句,可以利用 HAVING 針對分組后的結果進一步進行過濾,通常是針對聚合函數的結果進行過濾;
  6. 接下來, SELECT 可以指定要返回的列;如果指定了 DISTINCT 關鍵字,需要對結果集進行去重操作。另外還會為指定了 AS 的字段生成別名;
  7. 如果還有集合操作符( UNIONINTERSECTEXCEPT )和其他的 SELECT 語句,執行該查詢并且合并兩個結果集。對于集合操作中的多個 SELECT 語句,數據庫通常可以支持并發執行;
  8. 然后,應用 ORDER BY 子句對結果進行排序。如果存在 GROUP BY 子句或者 DISTINCT 關鍵字,只能使用分組字段和聚合函數進行排序;否則,可以使用 FROMJOIN 表中的任何字段排序;
  9. 最后, OFFSETFETCH(LIMIT、TOP) 限定了最終返回的行數。

總結

以上是生活随笔為你收集整理的MySQL 学习笔记(17)— SQL 执行顺序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。