繁体   English   中英

SQL查询,执行顺序

[英]SQL query, sequence of execution

如果查询同时包含group by和order by子句,那么SQL后面的执行顺序是什么。 它取决于它们在查询中的位置???

ORDER BY总是对GROUP BY执行的分组结果执行,即始终“after”。 在标准SQL中,在GROUP BY ,如果两者都存在,则必须在词法上具有ORDER BY ,以“提醒您”这一事实。

为了:

FROMJOIN确定并过滤行
行更多的过滤器
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM