[英]Execution sequence of Group By, Having and Where clause in SQL Server?
當我們將GROUP BY
和HAVING
與WHERE
子句一起使用時,我只是對 SQL 查詢的執行順序感到困惑。 哪個先被執行? 順序是什么?
為了:
FROM & JOIN確定和過濾行
WHERE行上的更多過濾器
GROUP BY將這些行組合成組
HAVING過濾器組
ORDER BY排列剩余的行/組
對剩余的行/組進行LIMIT過濾
這是 sql server 的完整序列:
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE or WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP
所以從上面的列表中,你可以很容易的理解GROUP BY, HAVING and WHERE
的執行順序,即:
1. WHERE
2. GROUP BY
3. HAVING
WHERE 是第一個,然后您對查詢的結果進行分組,最后但並非最不重要的 HAVING 子句用於過濾分組結果。 這是“邏輯”順序,我不知道這是如何在引擎中技術實現的。
我認為它是在引擎中實現的,正如 Matthias 所說:WHERE、GROUP BY、HAVING
試圖在網上找到一個列出整個序列的參考(即“SELECT”在底部),但我找不到它。 不久前,Solid Quality Learning 所著的“Inside Microsoft SQL Server 2005”一書中對此進行了詳細介紹
編輯:找到一個鏈接: http : //blogs.x2line.com/al/archive/2007/06/30/3187.aspx
在 Oracle 12c 中,您可以按以下任一順序運行代碼:
Where
Group By
Having
或者
Where
Having
Group by
想一想如果你想實施你需要做什么:
順序是 WHERE、GROUP BY 和 HAVING。
按以下順序
Have Clause 可能出現在 group by 子句之前/之前。
示例: select * FROM test_std; ROLL_NO SNAME DOB TEACH
1 John 27-AUG-18 Wills
2 Knit 27-AUG-18 Prestion
3 Perl 27-AUG-18 Wills
4 Ohrm 27-AUG-18 Woods
5 Smith 27-AUG-18 Charmy
6 Jony 27-AUG-18 Wills
Warner 20-NOV-18 Wills
Marsh 12-NOV-18 Langer
FINCH 18-OCT-18 Langer
已選擇 9 行。
從 test_std 中選擇教學、計數( )計數,通過 TEACH具有計數( )> 1 組;
教數
蘭格 2 遺囑 4
選擇
從
加入
在哪里
通過...分組
有
訂購者
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.