【问题标题】:Is there any specific order of execution in SQL query?SQL查询中是否有任何特定的执行顺序?
【发布时间】:2018-11-05 11:53:34
【问题描述】:

我对 SQL 查询的执行顺序感到困惑。

例如,(MySQL 中的Inner join 在下面的代码中),在WHERE 子句和SELECT * FROM 子句之间,首先解释和执行哪一个?

也就是说,下面的查询是不是先把tables data中的*(all)带进来,然后再找到符合WHERE条件的case呢?还是他们只是从WHERE 结果中找到与WHERE 条件匹配的data 列表,然后找到SELECT * FROM

SELECT * FROM customers, orders
WHERE customers.id = orders.customer_id;

如上例,我想知道 SQL 查询一般是如何执行的。

【问题讨论】:

标签: mysql sql inner-join


【解决方案1】:

查询文本的评估有一个逻辑顺序,但是数据库引擎可以根据最优化的顺序来选择执行查询组件的顺序。下面列出了逻辑文本解析顺序。也就是说,例如,为什么您不能在 WHERE 子句中使用来自 SELECT 子句的别名。就查询解析过程而言,别名还不存在。

  1. 来自

  2. 开启

  3. 外层

  4. 在哪里

  5. 分组方式

  6. 立方体 | ROLLUP(这些在 MySQL 中不存在,但在其他一些 SQL 方言中存在)

  7. 选择

  8. 不同

  9. 订购方式

  10. LIMIT(或在 MSSQL 中为 TOP)

有关更多信息,请参阅the Microsoft documentation (see "Logical Processing Order of the SELECT statement")

【讨论】:

  • 不错的答案...如果有参考资料会更好
  • 问题被标记为 MySQL。 MySQL中没有TOP;相反,关键字是LIMIT
猜你喜欢
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多