SQL查询,执行顺序

时间:2009-09-21 14:26:27

标签: sql sql-execution-plan

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

8 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

按顺序:

  

FROM & 加入确定&过滤行
   WHERE 行上的更多过滤器
   GROUP BY 将这些行组合成组    HAVING 过滤群组    ORDER BY 排列剩余的行/组

答案 2 :(得分:1)

这取决于许多因素,包括您正在使用的RDMS。找出正在发生的事情的最好方法是使用一个允许您查看查询执行计划的查询工具。

答案 3 :(得分:1)

排序通常最后发生。

如果您正在使用SQL Server,则启动query analyzer and execution plan将为您提供查询的精美图形表示。

答案 4 :(得分:1)

任何SQL语句都不强制执行序列。要求的是结果与通过“规范”评估获得的结果相匹配。在规范评估中,ORDER BY最后应用(即使在评估SELECT列表表达式之后),但这并不意味着在实际系统上实际执行查询时,排序被推迟到该点。

答案 5 :(得分:0)

首先执行

group by,然后对该组的结果进行排序。

答案 6 :(得分:0)

假设我们有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

答案 7 :(得分:0)

我还建议使用查询分析器来处理特定的数据库引擎。以下是Postgres中的一个示例,它解释了首先执行ORDER BY,然后执行WHERE过滤器:

EXPLAIN
SELECT * FROM table WHERE id=x AND date<='yyyy-mm-dd' ORDER BY date DESC;

因此,如果我将DESC更改为ASC,结果集将包含不同的记录!