我在查询编写方面并不专业,但从我开始使用 MySQL 时就写了很多。最近我注意到没有必要AS在名称别名中输入关键字。
SELECT name AS n
等于
SELECT name n
但是我知道这种能力在几年前就已经消失了。关于这个主题,我有 2 个问题:
- 关键字是AS多余的吗?
- 有时,当我在一个没有别名的网站上遇到一个自定义查询时 - AS,它的执行导致 MySQL 服务停止,我通过添加关键字更改了名称别名的方式,- AS这个小改动使它起作用了!- 这里有什么问题? 
我在查询编写方面并不专业,但从我开始使用 MySQL 时就写了很多。最近我注意到没有必要AS在名称别名中输入关键字。
SELECT name AS n
等于
SELECT name n
但是我知道这种能力在几年前就已经消失了。关于这个主题,我有 2 个问题:
AS多余的吗?有时,当我在一个没有别名的网站上遇到一个自定义查询时AS,它的执行导致 MySQL 服务停止,我通过添加关键字更改了名称别名的方式,AS这个小改动使它起作用了!
这里有什么问题?
对于 1) 的答案,mysql 文档http://dev.mysql.com/doc/refman/5.0/en/select.html:
可以使用 AS alias_name 为 select_expr 指定别名。别名用作表达式的列名,可用于
GROUP BY、ORDER BY或HAVING子句。例如:SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;当使用标识符为 select_expr 起别名时,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) 的答案,我认为如果没有软件版本的完整描述、正在运行的查询和收到的错误消息,您无论如何都无法判断。