2017-08-22 43 views
2

MySQL是否按写入顺序执行查询?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; 

怎么能当客户为C不会发生,直到倒数第三行CONCAT(c.last_name, ', ', c.first_name)被执行?它不会导致错误。

回答

0

在SQL代码是按特定的顺序进行评价:

  • 第一FROM子句进行评估和相关的别名
  • 然后WHERE条件
  • 之后SELECT子句
  • 和最后是GROUP BY,HAVING子句和ORDER BY

因此,表别名的名称在选择时间。

+0

感谢您的回复。非常感激。 – chu8

+0

@如果我对其他人的回答是正确的,那么请选择更好,并请将其标记为已接受...请参阅这里如何 http://meta.stackexchange.com/questions/5234/how-does-accepting- an-answer-work – scaisEdge

+0

ahh是的。即时通讯新的堆栈溢出,所以没有意识到这一点。谢谢。 – chu8

0

我认为你的问题实际上是一个很好的问题。

想想这样: 一旦你知道从哪里选择它,你就不能选择任何东西。 以同样的方式,您不能在任何东西被选定之前排序。

因此,当您在表名上创建别名时,mysql可以在选择部分中使用它。 当你在选择部分中创建一个别名时,mysql可以在订单部分使用它。

我希望这能为你澄清。请让我知道这是否为你回答。

+0

感谢您的回复。非常感激。 – chu8