【问题标题】:Why would you use "AS" when aliasing a SQL table?为什么在给 SQL 表起别名时使用“AS”?
【发布时间】:2011-01-28 03:17:38
【问题描述】:

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

【问题讨论】:

    标签: sql syntax standards syntactic-sugar


    【解决方案1】:

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

    编辑: Oracle 不支持这里的 'AS' 关键字;

    ORA-00933: SQL command not properly ended
    

    【讨论】:

    • 如果我没记错的话,Oracle 不支持 'AS' 用于表别名,但 'AS' 关键字对于字段别名是必需的。
    • 我只是在这里进行了测试以确定,但我确实不适用于表别名。 (见编辑)
    • @Will Marcouiller - 很有趣。这是我最常看到的语法(AS 表示字段而不是表),我认为它是必需的;也许这就是原因。
    • 是的,我也试过了,看来Oracle只支持AS的列别名。
    【解决方案2】:

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

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

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

    【讨论】:

    • 如果您的数据库支持它,它肯定更具可读性。很好的语法糖:)
    • 感谢您的回答。不过,只是想指出-第二段更多的是使用别名的原因,而不是使用“AS”或为什么不使用“AS”的原因。
    • @froadie:是的,我想我被“混叠热”冲昏了头脑!我认为你是对的,第一段最直接地回答了这个问题。
    • +1 正是为了提出这两点,为什么你使用'as'以及为什么你在第一点使用别名。这两点需要一起记住!
    • 只是想评论一下,我认为 MS Access 要求您使用“As”。我确定您的问题与 MS Access 无关。只是说。
    【解决方案3】:

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

    代替:

    select *
    from Orders, Customers;
    

    你最终得到:

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

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

    【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

      • 你的意思是“用“as”别名实际上是“
      • @Ashish Gupta - 不要这么认为,听起来他/她的意思是使用“a”作为别名不是很容易理解。我同意,但是如果您将其别名为更短的 并且 仍然可以识别,我认为它有一个位置。当表名长得令人讨厌时,我经常看到别名。
      • @froadie - 这是一种平衡。但正如我所说,如果这是一个严肃的 2 页长的查询,其中有 7 个表,其中 4 个表以“a”开头,并且命名有点相似,那么别名是可读性的净损失。
      【解决方案6】:

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

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

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

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

          至于何时应该明确指定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-02-04
          • 1970-01-01
          • 2021-06-04
          • 1970-01-01
          • 2015-07-31
          • 1970-01-01
          • 2016-12-16
          • 2022-01-22
          • 2010-09-16
          相关资源
          最近更新 更多