MySQL AS关键字

rev*_*evo 10 mysql

我在查询编写方面不专业,但从我开始使用MySQL时写了很多.最近我发现没有必要AS在名称别名中键入关键字.

SELECT name AS n
Run Code Online (Sandbox Code Playgroud)

等于

SELECT name n
Run Code Online (Sandbox Code Playgroud)

但是我知道这种能力是多年前的.关于这个问题,我有2个问题:

  1. AS关键字是多余的?
  2. 有时候,当我遇到一个没有AS别名的网站上的自定义查询时,它正在执行MySQL服务,我通过添加AS关键字改变了名称别名的方式,这个小小的改动使它工作了!

    这是什么问题?

Mod*_*Joe 19

对于1)的答案,mysql文档http://dev.mysql.com/doc/refman/5.0/en/select.html:

可以使用AS alias_name为select_expr指定别名.别名用作表达式的列名,并且可以在被使用GROUP BY, ORDER BYHAVING条款.例如:

SELECT CONCAT(last_name,', ',first_name) AS full_name   FROM mytable
ORDER BY full_name;
Run Code Online (Sandbox Code Playgroud)

使用标识符别名化select_expr时,AS关键字是可选的.前面的例子可能是这样编写的:

SELECT CONCAT(last_name,', ',first_name) full_name   FROM mytable
ORDER BY full_name;
Run Code Online (Sandbox Code Playgroud)

但是,因为AS是可选的,如果您忘记两个select_expr表达式之间的逗号,则会出现一个微妙的问题:MySQL将第二个解释为别名.例如,在以下语句中,columnb被视为别名:

SELECT columna columnb FROM mytable;
Run Code Online (Sandbox Code Playgroud)

因此,在指定列别名时习惯使用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;
Run Code Online (Sandbox Code Playgroud)

对于2)的答案,我认为无论如何,如果没有软件版本的完整描述,运行查询和收到错误消息,您都无法判断.