SQL Server中的Group By,Having和Where子句的执行顺序是什么?
我只是混淆了SQL查询的执行顺序,当我们使用GROUP BY和HAVING与WHERE子句。 哪一个先执行? 什么是序列?
为了:
FROM & JOIN确定并过滤行
在行上有更多的filter
GROUP BY将这些行组合在一起
HAVINGfilter组
ORDER BY排列其余的行/组
限制其他行/组的限制
WHERE是首先,然后你GROUP查询的结果,最后但并非最不重要的是采取HAVING子句过滤分组的结果。 这是“逻辑”的顺序,我不知道这是如何在技术上实现的引擎。
我认为这是Matthias所说的在引擎中实现的:WHERE,GROUP BY,HAVING
试图在网上find一个列出整个序列的参考(即“select”在底部),但我找不到它。 这是在Solid Quality Learning不久前我读到的“Inside Microsoft SQL Server 2005”一书中详细介绍的
编辑:find一个链接: http : //blogs.x2line.com/al/archive/2007/06/30/3187.aspx
想想如果你想实现你需要做的事情:
- WHERE :它需要执行JOIN操作。
- GROUP BY :指定Group by来对连接上的结果进行“分组”,然后在JOIN操作之后,使用WHERE之后。
- HAVING :HAVING用于GROUP BYexpression式的过滤。 然后,在GROUP BY之后执行。
顺序是在哪里,GROUP BY和HAVING。
在下面的顺序
- FROM&JOIN
- 哪里
- 通过…分组
- HAVING
- select
- ORDER BY
- 限制
在Oracle 12c中,您可以按以下顺序运行代码:
Where Group By Having
要么
Where Having Group by
- 从
- 上
- join
- 哪里
- 通过…分组
- WITH CUBE或WITH ROLLUP
- HAVING
- select
- 不同
- ORDER BY
- 最佳
你可以在这里获得更多的信息
select
从
JOIN的
哪里
通过…分组
HAVING
ORDER BY