[英]SQL query, sequence of execution
如果查询同时包含group by和order by子句,那么SQL后面的执行顺序是什么。 它取决于它们在查询中的位置???
ORDER BY
总是对GROUP BY
执行的分组结果执行,即始终“after”。 在标准SQL中,在GROUP BY
,如果两者都存在,则必须在词法上具有ORDER BY
,以“提醒您”这一事实。
为了:
FROM & JOIN确定并过滤行
凡行更多的过滤器
GROUP BY将这些行组合成组
有过滤器组
ORDER BY排列剩余的行/组
这取决于许多事情,包括您正在使用的RDMS。 找出正在发生的事情的最好方法是使用一个查询工具,它允许您查看查询执行计划。
订单通常最后发生。
如果您正在使用SQL Server,则启动查询分析器和执行计划将为您提供查询的精美图形表示。
任何SQL语句都不强制执行序列。 要求的是结果与通过“规范”评估获得的结果相匹配。 在规范评估中,最后应用ORDER BY(即使在评估SELECT列表表达式之后),但这并不意味着在实际系统上实际执行查询时,排序被推迟到该点。
group by先执行,然后对该组的结果进行排序。
我们假设我们有SQL查询:
SELECT ...
FROM ...
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY ...
SQL查询的子子句的执行顺序是:
1. FROM clause
2. WHERE clause
3. GROUP BY clause
4. HAVING clause
5. SELECT clause
6. ORDER BY clause
我还建议使用查询分析器来处理特定的数据库引擎。 以下是Postgres中的一个示例,它解释了首先执行ORDER BY,然后执行WHERE过滤器:
EXPLAIN
SELECT * FROM table WHERE id=x AND date<='yyyy-mm-dd' ORDER BY date DESC;
因此,如果我将DESC更改为ASC,结果集将包含不同的记录!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.