我对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查询。
答案 0 :(得分:3)
有一个逻辑顺序可以评估查询文本,但是数据库引擎可以根据最佳条件来选择执行查询组件的顺序。下面列出了逻辑文本解析顺序。例如,这就是为什么您不能在SELECT
子句中使用WHERE
子句的别名。就查询解析过程而言,别名尚不存在。
FROM
打开
外部
位置
组
CUBE | ROLLUP(这些在MySQL中不存在,但在其他一些SQL方言中)
爱好
选择
DISTINCT
订购
LIMIT(或在MSSQL中为TOP)
有关更多信息,请参见the Microsoft documentation (see "Logical Processing Order of the SELECT statement")。