2013-10-24 51 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/ –