18

我刚刚遇到一个使用 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”关键字进行表别名或将其排除在外。

4

8 回答 8

25

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

另一个原因,有时完整的表名很长而且输入起来很麻烦。当您没有像自动完成这样的花哨功能时,或者当您只是感到懒惰时,使用较短的别名有时会使事情变得更容易。;)

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

于 2010-03-16T14:09:29.470 回答
7

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

代替:

select *
from Orders, Customers;

你最终得到:

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

虽然这不能通过引入“as”来解决,但您可以更轻松地判断它是否是有意的(因为我实际上可能想将订单别名为客户,这取决于我在查询期间对它做了什么)。

于 2010-03-16T14:12:37.117 回答
3

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

编辑: Oracle 不支持此处的“AS”关键字;

ORA-00933: SQL command not properly ended
于 2010-03-16T14:09:16.067 回答
3

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

节省 2 秒的打字时间——尤其是在这个智能感知 IDE 的时代——与可读性/可维护性相比有点愚蠢。

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

于 2010-03-16T14:13:11.000 回答
1

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

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

SELECT parent.Name AS ParentName,
child.Name AS ChildName
FROM MyTable AS parent
INNER JOIN MyTable as child
ON parent.ID = child.ParentID
于 2010-03-16T14:59:08.380 回答
0

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

于 2010-03-16T14:13:00.677 回答
0

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

我们的一个应用程序无法处理列名中的连字符(不要问我为什么),所以别名是转换COLUMN-NAME为的完美方法COLUMN_NAME

于 2010-03-16T15:46:25.253 回答
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
于 2014-05-23T18:48:45.710 回答