SQL查询中是否有任何特定的执行顺序?

时间:2018-11-04 17:42:21

标签: mysql sql inner-join

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

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

也就是说,下面的查询是否首先带来*中的tables data(全部),然后找到符合WHERE条件的情况?还是只是找到与data条件匹配的WHERE列表,然后从SELECT * FROM结果中找出WHERE的列表?

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

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

1 个答案:

答案 0 :(得分:3)

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

  1. FROM

  2. 打开

  3. 外部

  4. 位置

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

  6. 爱好

  7. 选择

  8. DISTINCT

  9. 订购

  10. LIMIT(或在MSSQL中为TOP)

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