为什么在别名SQL表时使用“AS”?

时间:2010-03-16 14:06:53

标签: sql syntax standards syntactic-sugar

我刚刚遇到一个使用AS来表示别名表的SQL语句,如下所示:

SELECT all, my, stuff
FROM someTableName AS a
INNER JOIN someOtherTableName AS b
    ON a.id = b.id

我以前看到的是:

SELECT all, my, stuff
FROM someTableName a
INNER JOIN someOtherTableName b
    ON a.id = b.id

我假设没有区别,它只是语法糖,但哪一种更普遍/广泛传播?是否有理由更喜欢一个而不是另一个?

已编辑以澄清:

我感谢所有答案和所有观点,但问题是为什么或为什么不使用表别名。问题纯粹是关于使用“AS”关键字进行表别名或将其遗漏。

8 个答案:

答案 0 :(得分:22)

这是语法糖,输入需要更长的时间,但有些人发现它更具可读性和清晰度。我使用它的原因是,在阅读大型查询时,通过查找AS来更容易选择别名。

另一个原因,有时候整个表名称很长而且很麻烦。当你没有像自动完成这样的花哨功能时,或者当你只是感觉懒惰时,对较短的东西进行别名有时会使事情变得更容易。 ;)

......正如其他人在我之前指出的那样,在进行自我加入时它会很有用。

答案 1 :(得分:7)

通常是首选。考虑如果你使用旧的“逗号符号”进行连接会发生什么,并且你错过了一个逗号。

而不是:

select *
from Orders, Customers;

你最终得到:

select *
from Orders Customers; --Customers is now the alias for Orders.

虽然引入'as'并不能解决这个问题,但您可以更轻松地判断它是否有意(因为我可能实际上想要将Orders命名为Customers,取决于我在查询期间对其做了什么)

答案 2 :(得分:3)

据我所知,并非所有数据库都支持AS语句。 (甲骨文?) 但由于某种原因,它看起来更具可读性。

修改 Oracle在这里不支持'AS'关键字;

ORA-00933: SQL command not properly ended

答案 3 :(得分:3)

首先,使用“a”的别名实际上通常被认为是坏事(我们在编码标准中正式禁止它)。原因是在一个冗长复杂的多表查询中,人们会忘记哪个别名代表哪个表。

在打字时节省2秒 - 特别是在这个智能感知IDE的时代 - 在权衡可读性/可维护性时是一种愚蠢的行为。

别名的主要合法用途是进行自连接

答案 4 :(得分:1)

字段别名是为了输出的可读性。表别名是为了查询结构的可读性。特别是在处理长表名称甚至跨数据库引用时。

如果查询中有重复的表引用,则应始终使用表别名来区分一个表与另一个表。例如,父子联接可能看起来像这样:

SELECT parent.Name AS ParentName,
child.Name AS ChildName
FROM MyTable AS parent
INNER JOIN MyTable as child
ON parent.ID = child.ParentID

答案 5 :(得分:0)

可能通过使用AS,您可以快速查看哪些表被用作别名。

答案 6 :(得分:0)

如果你有一个包含各种连接的巨大SQL语句,别名可以更容易地阅读/理解列的来源

我们的某个应用程序无法处理列名称中的连字符(不要问我原因),因此别名是将COLUMN-NAME转换为COLUMN_NAME的完美方法

答案 7 :(得分:0)

至于应明确指定AS时,它取决于特定引擎支持的语法个人偏好(甚至政策)。

在SQL Server(我要处理的全部内容)中,AS在FROM或JOIN中的关系名称之后是可选的。在这种情况下,由于我的偏好,我跳过关键字,并且我发现它没有"降低可读性"当与一致的面向行的连接形式一起使用时。

但是,在使用派生查询时,SQL Server 需要 AS关键字,因此我会在这种情况下努力将其包括在内。

再次,在由首选项引起的输出子句中,我包含AS。我相信我在这里选择关键字的原因在于,与我的连接格式不同,通常情况是多个标识符出现在同一行。

所以,对我来说,在SQL Server中:

SELECT a.all AS my, a.stuff  -- AS    (preference)
FROM someTableName a         -- no AS (preference)
INNER JOIN (
    SELECT ..
    ) AS b                   -- AS (required)
  ON a.id = b.id