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

问题描述 投票:19回答:15

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

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

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

而不是这个:

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

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

sql sql-server tsql
15个回答
22
投票

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

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


2
投票

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

SELECT MAX(price_column) maximumprice FROM prices

2
投票

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


2
投票

我喜欢

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

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

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


1
投票

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


0
投票

你也不必使用它们

删除AS并使用

SELECT originalname alias
FROM
   tablename

-1
投票

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

e.g:

 column as alias1

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。


8
投票

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

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


5
投票

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

使用等号而不是“AS”更容易阅读。使用等号,您知道您要查找的别名是在行的第一个位置。当使用'AS'并且T_SQL跨越多行时,别名可以在任何地方。

使用equals时,使用'AS'时,找到'Items'别名远比使用'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倍,并且需要找到“Items”别名。

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

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


4
投票

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

somecolumn as 'alias 1'

要么

'alias 1' = somecolumn

我更喜欢替代符号:

somecolumn as [alias 1]

4
投票

“=”只是简单明了。

如果你缩进打破每个select子句......

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


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

4
投票

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

select
    columnA,
    columnB
    columnC
from
    table

生成具有两列而不是预期的3列的结果集。

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

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

3
投票

我知道别名的三种方式:

  1. TableColumn AS MyAlias
  2. TableColumn MyAlias
  3. MyAlias = TableColumn

回复:1),我更喜欢这个,因为它是最自我记录的代码(IMO),它让我搜索AS如果我需要找到别名..

回复:2),这是我的第二选择,但没有AS,我不知道这是否是一个剪切和粘贴错误,尤其是在长,格式错误的查询中。

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

所以,我的投票是使用AS关键字作为你的别名。


2
投票

我更喜欢使用AS,因为=用在where语句中,并且在长查询中可能会令人困惑。

© www.soinside.com 2019 - 2024. All rights reserved.