2013-10-24 50 views
3

我不擅長查詢寫作,但寫了很多從我開始MySQL的時候。最近我注意到沒有必要在名稱別名中鍵入AS關鍵字。MySQL AS關鍵字

SELECT name AS n 

等於

SELECT name n 

但是我知道,這種能力是從幾年前出來。我有兩個問題圍繞這個問題:

  1. AS關鍵字是多餘的?
  2. 有時以前,當我在網站上遇到一個沒有AS的網站上的自定義查詢時,它的執行使MySQL服務關閉,我改變了名稱別名的方式,添加了AS關鍵字,這個小小的改變使它工作!

    這裏有什麼問題?

+0

類似於http://stackoverflow.com/questions/2454951/why-would-you-use-as-when-aliasing-a-sql-table - 別名列名是語法糖,使查詢有點更容易閱讀。 – FrustratedWithFormsDesigner

+0

可能你使用了一個需要as關鍵字的mysql版本。 – Mihai

+0

@FrustratedWithFormsDesigner也是它的兩種用途正式記錄? – revo

回答

11

爲了回答1),MySQL文檔http://dev.mysql.com/doc/refman/5.0/en/select.html

甲select_expr可以給出使用AS ALIAS_NAME的別名。別名是 ,用作表達式的列名稱,可用於GROUP BY, ORDER BYHAVING子句。例如:用 標識符混疊一個select_expr時

SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable 
ORDER BY full_name; 

AS關鍵字是可選的。上面的例子可以被寫成這樣:

SELECT CONCAT(last_name,', ',first_name) full_name FROM mytable 
ORDER BY full_name; 

但是,因爲AS是可選的,如果你 忘了兩個select_expr表達之間的逗號可能會出現一個小問題:MySQL的解釋 第二作爲一個別名。例如,在下面的語句, columnb被視爲一個別名:

SELECT columna columnb FROM mytable; 

出於這個原因,它是很好的做法,在指定列別名明確在使用AS 的習慣。

不允許在WHERE子句中引用列別名 ,因爲當執行WHERE 子句時,可能還沒有確定列值。請參見第C.5.5.4節「與列 別名有關的問題」。

爲表這也非常類似於句法:

一個表引用可以使用tbl_name AS ALIAS_NAME或 tbl_name ALIAS_NAME有別名:

SELECT t1.name, t2.salary FROM employee AS t1, info AS t2 WHERE 
t1.name = t2.name; 

SELECT t1.name, t2.salary FROM employee t1, info t2 WHERE t1.name = 
t2.name; 

對於問題的答案2)如果沒有軟件版本的完整描述,正在運行的查詢和收到的錯誤消息,我不認爲有任何說明。

+0

在我的情況下,別名是關於表名,執行查詢時沒有錯誤。但一個很好的答案。 – revo

+0

請考慮以下示例http://androidhotspot.com/mysql/2016/08/04/alias-clause-mysql-essential-training/ –