在对列进行别名时,是否有任何特殊原因(性能或其他方面)使用AS?
我个人的偏好(为了便于阅读)是使用这个:
select
alias1 = somecolumn
alias2 = anothercolumn
from
tables
etc...
而不是:
select
somecolumn as alias1
anothercolumn as alias2
from
tables
etc...
我错过了任何我不应该这样做的理由吗?在格式化列时,其他人的偏好是什么?
答案 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)
我知道别名的三种方式:
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