SQL查询有特定的执行顺序吗?

Bac*_*b32 0 mysql sql inner-join

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

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

也就是说,下面的查询是否会带来第一个*的(全部)tables data然后找到与条件匹配的案例WHEREdata或者他们只是找到符合条件的匹配列表WHERE,然后SELECT * FROMWHERE结果中找到?

SELECT * FROM customers, orders
WHERE customers.id = orders.customer_id;
Run Code Online (Sandbox Code Playgroud)

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

rsj*_*ffe 8

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

  1. 在哪里

  2. 通过...分组

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

  4. 拥有

  5. OVER(窗口函数)

  6. 选择

  7. 清楚的

  8. 订购依据

  9. LIMIT(或者在 MSSQL 中为 TOP)

有关详细信息,请参阅Microsoft 文档(请参阅“SELECT 语句的逻辑处理顺序”) 。