[英]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.