【问题标题】:What's the execute order of the different parts of a SQL select statement?SQL select 语句的不同部分的执行顺序是什么?
【发布时间】:2011-02-06 17:47:59
【问题描述】:

SQL 选择语句的不同部分的执行顺序是什么?如
与众不同
来自
订购者
分组

多行函数(计数、平均值、最大值、最小值...)
top(sql server) 或 limit(mysql)
其他部分

不同的数据库是否有相同的执行顺序? 非常感谢。

【问题讨论】:

  • 我在2010-04-11问的,你提到的问题是在2011-01-04问的。为什么不说这个问题是我的重复? @rsjaffe
  • 因为对方有更好的答案。重复标志的目标是使用每个重复的问题作为一些人搜索问题的指南,然后将它们发送到权威答案所在的地方。
  • 请参阅meta.stackexchange.com/questions/10841/…,了解有关选择关闭哪个的更多讨论。

标签: sql


【解决方案1】:

看看

SQL SERVER – Logical Query Processing Phases – Order of Statement Execution

  1. 来自
  2. 开启
  3. 外层
  4. 在哪里
  5. 分组依据
  6. 立方体 |汇总
  7. 选择
  8. 不同
  9. 订购人
  10. 顶部

另外,有关一些有用的信息,请参阅Logical Query Processing

【讨论】:

  • UNION 适合这个订单的什么地方?
  • @WalterMitty 我知道你很久以前就问过你的问题,但是UNIONUNION ALL 是将两个单独的查询连接在一起的方法,因此第一个查询会发生上述情况,然后第二个查询,则执行两个结果中的UNION
【解决方案2】:

上面的答案解决了这个问题,但上面提到的顺序有一个例外

当你有

选择前 n ......

按顺序

然后,order by 将在 select 之前执行。 (条目先排序,然后选择前 n 个条目)

【讨论】:

    【解决方案3】:

    访问 https://msdn.microsoft.com/en-us/library/ms189499.aspx 以获得更好的解释。

    以下步骤显示了 SELECT 语句的逻辑处理顺序或绑定顺序。此顺序确定一个步骤中定义的对象何时可用于后续步骤中的子句。例如,如果查询处理器可以绑定到(访问)在 FROM 子句中定义的表或视图,则这些对象及其列可用于所有后续步骤。相反,因为 SELECT 子句是第 8 步,所以在该子句中定义的任何列别名或派生列都不能被前面的子句引用。但是,它们可以被后续子句引用,例如 ORDER BY 子句。请注意,语句的实际物理执行由查询处理器确定,并且顺序可能与此列表不同。

    来自

    开启

    加入

    在哪里

    分组方式

    WITH CUBE 或 WITH ROLLUP

    拥有

    选择

    不同的

    订购方式

    顶部

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 2016-12-19
      • 2020-02-24
      • 1970-01-01
      相关资源
      最近更新 更多