T-SQL - 使用“=”与“as”进行别名化

时间:2009-10-01 11:10:25

标签: sql sql-server tsql

在对列进行别名时,是否有任何特殊原因(性能或其他方面)使用AS?

我个人的偏好(为了便于阅读)是使用这个:

select
alias1     = somecolumn
alias2     = anothercolumn
from
tables
etc...

而不是:

select
somecolumn as alias1
anothercolumn as alias2
from
tables
etc...

我错过了任何我不应该这样做的理由吗?在格式化列时,其他人的偏好是什么?

16 个答案:

答案 0 :(得分:22)

'='是无效的ANSI SQL,因此如果您希望在不同的DBMS上运行应用程序,则会遇到困难。

(当使用ANSI表格但省略了可选的'AS'时,我发现个人难以阅读的结果。)

答案 1 :(得分:14)

要放入一些配重,我更喜欢使用=。

如果我是某种方式的查询结果的消费者,我发现看看作为消费者的哪些列可以使用它会更方便。

我更喜欢这个

SELECT
      [ElementObligationID] = @MaxElementObligationID + eo.ElementObligationID
      , [ElementID] = eo.ElementID
      , [IsotopeID] = eo.IsotopeID
      , [ObligationID] = eo.ObligationID
      , [ElementWeight] = eo.ElementWeight * -1
      , [FissileWeight] = eo.FissileWeight * -1
      , [Items] = eo.Items * -1
      , [Comment] = eo.Comment
      , [AdditionalComment] = eo.AdditionalComment
      , [Aanmaak_userid] = @UserID
      , [Aanmaak_tijdstip] = GetDate()
      , [Laatste_wijziging_userid] = @UserID
      , [Laatste_wijziging_tijdstip] = GetDate()
FROM  dbo.KTM_ElementObligation eo
      INNER JOIN dbo.KTM_ElementObligationArticle eoa ON 
          eoa.ElementObligationID = eo.ElementObligationID

这个

SELECT
      @MaxElementObligationID + eo.ElementObligationID AS [ElementObligationID]
      , eo.ElementID AS [ElementID]
      , eo.IsotopeID AS [IsotopeID]
      , eo.ObligationID AS [ObligationID]
      , eo.ElementWeight * -1 AS [ElementWeight]
      , eo.FissileWeight * -1 AS [FissileWeight]
      , eo.Items * -1 AS [Items]
      , eo.Comment AS [Comment]
      , eo.AdditionalComment AS [AdditionalComment]
      , @UserID AS [Aanmaak_userid]
      , GetDate() AS [Aanmaak_tijdstip]
      , @UserID AS [Laatste_wijziging_userid]
      , GetDate() AS [Laatste_wijziging_tijdstip]
FROM  dbo.KTM_ElementObligation eo
      INNER JOIN dbo.KTM_ElementObligationArticle eoa ON 
          eoa.ElementObligationID = eo.ElementObligationID

只是我的2c。

答案 2 :(得分:8)

我不会简单地使用它,因为它看起来太像平等操作。 'AS'很明显,因为它对我来说并不含糊。

与在sql中不使用大写相同,我发现它更难阅读。

答案 3 :(得分:5)

我没有像在这里发布的其他人一样幸运。我使用的代码通常是由其他人编写的,很少有CASE语句或其他计算,连接或逻辑导致单个条目跨越多行T_SQL脚本。

使用等号代替' AS'到目前为止更容易阅读。使用等号,您知道您要查找的别名是在行的第一个位置。当' AS'使用并且T_SQL跨越多行,别名可以在任何地方。

找到'项目'远远,更容易。使用equals时的别名比使用' AS'使用。

    SELECT
        ElementObligationID = @MaxElementObligationID + eo.ElementObligationID
      , ElementID = eo.ElementID
      , IsotopeID = eo.IsotopeID
      , ObligationID = eo.ObligationID
      , ElementWeight = eo.ElementWeight * -1
      , FissileWeight = eo.FissileWeight * -1
      , Items = CASE WHEN eo.Items < 0 THEN eo.Items * -1
                     WHEN eo.Items > 0 THEN eo.Items
                     ELSE 0 END
      , Comment = eo.Comment
      , AdditionalComment = eo.AdditionalComment
      , Aanmaak_userid = @UserID
      , Aanmaak_tijdstip = GetDate()
      , Laatste_wijziging_userid = @UserID
      , Laatste_wijziging_tijdstip = GetDate()
FROM  dbo.KTM_ElementObligation eo
      INNER JOIN dbo.KTM_ElementObligationArticle eoa ON 
          eoa.ElementObligationID = eo.ElementObligationID

现在想象一下,这里的代码数量超过5倍,需要找到&#39; Items&#39;别名。

SELECT
      @MaxElementObligationID + eo.ElementObligationID AS ElementObligationID
      , eo.ElementID AS ElementID
      , eo.IsotopeID AS IsotopeID
      , eo.ObligationID AS ObligationID
      , eo.ElementWeight * -1 AS ElementWeight
      , eo.FissileWeight * -1 AS FissileWeight
      , CASE WHEN eo.Items < 0 THEN eo.Items * -1
             WHEN eo.Items > 0 THEN eo.Items
             ELSE 0 END AS Items
      , eo.Comment AS Comment
      , eo.AdditionalComment AS AdditionalComment
      , @UserID AS Aanmaak_userid
      , GetDate() AS Aanmaak_tijdstip
      , @UserID AS Laatste_wijziging_userid
      , GetDate() AS Laatste_wijziging_tijdstip
FROM  dbo.KTM_ElementObligation eo
      INNER JOIN dbo.KTM_ElementObligationArticle eoa ON 
          eoa.ElementObligationID = eo.ElementObligationID

&#39; AS&#39; vs&#39; =&#39;不是任意的任意偏好。当我说有时需要几分钟才能找到我正在寻找的别名时,我并不夸张,因为我现在负责维护的脚本的作者没有使用带别名的等号。我不能想到浪费时间,金钱和资源,而不是付钱给IT专业人员来寻找代码中的别名! 如果您关心可维护性,可读性和效率,则有正确和错误的答案 。你的工作就是提供商业价值,而不是花一天时间寻找Waldo!

答案 4 :(得分:4)

=可以与赋值和平等相混淆;实际上,我真的不喜欢的形式是它看起来像一个字符串(通常是涉及空格时):

somecolumn as 'alias 1'

'alias 1' = somecolumn

我更喜欢替代符号:

somecolumn as [alias 1]

答案 5 :(得分:4)

“=”只是简单明了。

如果你缩进以打破每个选择条款......

select
    alias1     = somecolumn,
    alias2     = anothercolumn,
    result     = column1 * column2
from
    table
....


select
    somecolumn as          alias1,
    anothercolumn as       alias2,
    column1 * column2 as   result
from
    tables
     ...

答案 6 :(得分:4)

后缀别名形式(带或不带“AS”)在列别名和表别名之间是一致的。就个人而言,我想要一个强制使用“AS”的选项,然后你就不会有这种情况:

select
    columnA,
    columnB
    columnC
from
    table

生成一个包含两列而不是预期的列的结果集。

我还要说使用前缀“=”形式,如果您正在混合获取结果集和变量赋值,它会使读取更加困难:

select
    cA = columnA,
    @cB = columnB,
    cC = columnC
from
    table

答案 7 :(得分:3)

我知道别名的三种方式:

  1. TableColumn AS MyAlias
  2. TableColumn MyAlias
  3. MyAlias = TableColumn
  4. Re:1),我更喜欢这个,因为它是最自我记录的代码(IMO),如果我需要查找别名,它可以让我搜索AS

    Re:2),这是我的第二选择,但是没有AS,我无法确定这是否是剪切和粘贴错误,尤其是在长期,格式错误的查询中。 / p>

    Re:3),我不喜欢这个因为a)它看起来像是一个赋值,而b)它与ON子句和CASE语句混合太多

    因此,我的投票是对您的别名使用AS关键字。

答案 8 :(得分:2)

我更喜欢使用AS,因为在where语句中使用了=,并且在长查询中可能会造成混淆。

答案 9 :(得分:2)

我更喜欢不使用这些。我只是给出了列之间没有任何关键字的列的名称

SELECT MAX(price_column) maximumprice FROM prices

答案 10 :(得分:2)

由“=”语法声明的列别名在SQL Server 2008中已弃用,在下一版本中不受支持。请参阅MSDN article

答案 11 :(得分:2)

我喜欢

SELECT
 column1 = table.column1
 ,column2 = table.colum2
FROM table

与a =符号相比,我发现AS并不那么容易记录(我可以发现=比AS更快)

当一个人只做SELECT列别名时,有时候知道哪个是哪个是令人困惑的:)

答案 12 :(得分:1)

虽然我倾向于使用AS,但这里真正关键的是拥有企业标准并遵循它。如果你的更多人使用AS而不是=那么每个人都应该使用它。编码标准使得维护代码变得更容易,而不是您选择的特定标准。如果每个人都使用相同的东西,那么你的眼睛习惯于把它拿出来。

答案 13 :(得分:0)

您不必使用

删除AS并使用

SELECT originalname alias
FROM
   tablename

答案 14 :(得分:0)

由于我是为几种不同的关系数据库管理系统编写SQL的,所以我更喜欢使用对所有它们都适用的语法,这通常意味着编写与ANSI兼容的SQL。我通常的格式设置是:

SELECT S.name AS SchemaName, O.name AS ObjectName, C.column_id AS ColumnId, C.name AS ColumnName FROM sys.schemas AS S INNER JOIN sys.objects AS O ON S.schema_id = O.schema_id INNER JOIN sys.columns AS C ON O.object_id = C.object_id ORDER BY S.name ASC, O.name ASC, C.column_id ASC;

作为上述的另一种格式,以下内容使查看列别名的名称更加容易:

SELECT S.name AS SchemaName, O.name AS ObjectName, C.column_id AS ColumnId, C.name AS ColumnName FROM sys.schemas AS S INNER JOIN sys.objects AS O ON S.schema_id = O.schema_id INNER JOIN sys.columns AS C ON O.object_id = C.object_id ORDER BY S.name ASC, O.name ASC, C.column_id ASC;

答案 15 :(得分:-1)

**即使我更喜欢使用'as'而不是'='。 '='会使代码混乱。

例如:

 column as alias1