2017-08-22 73 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