我在查询编写方面不专业,但从我开始使用MySQL时写了很多。最近我发现没有必要在名称别名中键入AS
关键字。
SELECT name AS n
等于
SELECT name n
但是我知道这种能力已经存在多年了。关于这个问题,我有2个问题:
AS
关键字是多余的?有时候,当我在一个没有AS
别名的网站上遇到自定义查询时,它正在执行MySQL服务,我通过添加{{1}改变了名称别名的方式}关键字,这个小小的改变让它发挥作用!
这里有什么问题?
答案 0 :(得分:17)
对于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的答案)我不认为如果没有软件版本的完整描述,正在运行的查询和收到的错误消息,你无法判断。