【问题标题】:MySQL AS keyword [duplicate]MySQL AS关键字[重复]
【发布时间】:2013-10-24 13:43:34
【问题描述】:

我在查询写作方面并不专业,但从我开始使用 MySQL 时就写了很多。最近我注意到在名称别名中不需要输入AS 关键字。

SELECT name AS n

等于

SELECT name n

但是我知道这种能力在几年前就已经失效了。关于这个主题我有 2 个问题:

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

    这里有什么问题?

【问题讨论】:

  • 类似于stackoverflow.com/questions/2454951/… - 别名列名是语法糖,使查询更易于阅读。
  • 可能你使用了需要 as 关键字的 mysql 版本。
  • @FrustratedWithFormsDesigner 以及它的两种用途是否正式记录在案?
  • 我问了 2 个问题,为了第二个问题,为什么要接近投票?
  • @revo 在查询中出现语法错误时关闭 MySQL 服务没有任何意义。顺便说一句,甚至没有语法错误,因为不需要 AS

标签: mysql


【解决方案1】:

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

可以使用 AS alias_name 为 select_expr 指定别名。别名是 用作表达式的列名,可用于GROUP BYORDER BYHAVING 子句。例如:

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 别名:

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) 的答案,如果没有软件版本的完整描述、正在运行的查询和收到的错误消息,我认为无论如何你都无法判断。

【讨论】:

  • 在我的例子中,别名是关于表名的,执行查询时没有错误。但一个很好的答案。
猜你喜欢
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多