MySQL 是否按照写入的顺序执行查询?

Does MySQL execute a query in the order it is written?

MySQL是否按照写入的顺序执行查询?

我注意到有时别名(例如在下面:customers AS c)在使用别名后排在一行中。通常在其他编程中,您先声明一个变量,然后再使用它。但是在 Mysql 我见过这样的事情:

SELECT SUM(balance) AS Total,  
COUNT(account_id) AS Number,   
CONCAT(c.last_name, ', ', c.first_name) AS Name  
FROM accounts AS a   
INNER JOIN customers AS c  
USING (customer_id)  
GROUP BY (a.customer_id) ORDER BY Name;  

CONCAT(c.last_name, ', ', c.first_name)如何在customers AS c 直到倒数第三行才出现?而且它不会导致错误。

我觉得你的问题其实很好

这样想: 一旦你知道从哪里 select 它就不能 select 任何东西。 同样,您不能在 selected 之前订购任何东西。

因此,当您在表名上创建别名时,mysql 可以在 selection 部分使用它。 当您在 selection 部分创建别名时,mysql 可以在 order 部分使用它。

我希望这能为您澄清。如果这能为您解答,请告诉我。

在 sql 中,代码按特定顺序求值:

  • 首先评估 FROM 子句和相关别名
  • 然后WHERE条件
  • 之后是 SELECT 子句
  • 最后是 GROUP BY、HAVING 子句和 ORDER BY

因此 table 别名在 select 时间是众所周知的。