1. 程式人生 > 資料庫 >SQL Lesson 12: 查詢執行順序

SQL Lesson 12: 查詢執行順序

SQL Lesson 12: 查詢執行順序


完整的SELECT查詢

SELECT DISTINCT column, AGG_FUNC(column_or_expression), …
FROM mytable
    JOIN another_table
      ON mytable.column = another_table.column
    WHERE constraint_expression
    GROUP BY column
    HAVING constraint_expression
    ORDER BY column ASC/DESC
    LIMIT count OFFSET COUNT;

查詢執行順序

1. FROM 和 JOINs
FROM 或 JOIN會第一個執行,確定一個整體的資料範圍. 如果要JOIN不同表,可能會生成一個臨時Table來用於 下面的過程。總之第一步可以簡單理解為確定一個數據源表(含臨時表)

2. WHERE
我們確定了資料來源 WHERE 語句就將在這個資料來源中按要求進行資料篩選,並丟棄不符合要求的資料行,所有的篩選col屬性 只能來自FROM圈定的表. AS別名還不能在這個階段使用,因為可能別名是一個還沒執行的表示式

3. GROUP BY
如果你用了 GROUP BY 分組,那GROUP BY 將對之前的資料進行分組,統計等,並將是結果集縮小為分組數.這意味著 其他的資料在分組後丟棄.

4. HAVING
如果你用了 GROUP BY 分組, HAVING 會在分組完成後對結果集再次篩選。AS別名也不能在這個階段使用.

5. SELECT
確定結果之後,SELECT用來對結果col簡單篩選或計算,決定輸出什麼資料.

6. DISTINCT
如果資料行有重複DISTINCT 將負責排重.

7. ORDER BY
在結果集確定的情況下,ORDER BY 對結果做排序。因為SELECT中的表示式已經執行完了。此時可以用AS別名.

8. LIMIT / OFFSET
最後 LIMIT 和 OFFSET 從排序的結果中擷取部分資料.

使用

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述