MySQL是否按写入顺序执行查询?
问题描述:
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)
被执行?它不会导致错误。
答
在SQL代码是按特定的顺序进行评价:
- 第一FROM子句进行评估和相关的别名
- 然后WHERE条件
- 之后SELECT子句
- 和最后是GROUP BY,HAVING子句和ORDER BY
因此,表别名的名称在选择时间。
答
我认为你的问题实际上是一个很好的问题。
想想这样: 一旦你知道从哪里选择它,你就不能选择任何东西。 以同样的方式,您不能在任何东西被选定之前排序。
因此,当您在表名上创建别名时,mysql可以在选择部分中使用它。 当你在选择部分中创建一个别名时,mysql可以在订单部分使用它。
我希望这能为你澄清。请让我知道这是否为你回答。
+0
感谢您的回复。非常感激。 – chu8
感谢您的回复。非常感激。 – chu8
@如果我对其他人的回答是正确的,那么请选择更好,并请将其标记为已接受...请参阅这里如何 http://meta.stackexchange.com/questions/5234/how-does-accepting- an-answer-work – scaisEdge
ahh是的。即时通讯新的堆栈溢出,所以没有意识到这一点。谢谢。 – chu8