我一直都将列别名写为
SELECT 1 as ColumnName
但是今天遇到了一个使用了
SELECT ColumnName = 1
这两个查询的执行方式有何不同?还是在DBA中有关于使用哪个标准的标准?
我个人认为,第二个会更容易阅读/(很好的例子保持更长的列定义在这里从这篇文章),但我从来没有见过,所以今天很奇怪,之前使用的第二语法,如果有某种原因,我不应该使用它。
我一直都将列别名写为
SELECT 1 as ColumnName
但是今天遇到了一个使用了
SELECT ColumnName = 1
这两个查询的执行方式有何不同?还是在DBA中有关于使用哪个标准的标准?
我个人认为,第二个会更容易阅读/(很好的例子保持更长的列定义在这里从这篇文章),但我从来没有见过,所以今天很奇怪,之前使用的第二语法,如果有某种原因,我不应该使用它。
Answers:
两种类型的别名(与as
相对=
)的基础功能没有区别。归根结底就是您所说的:可读性和可维护性。
我认为前者(<Expression> as <Alias>
)具有更好的可读性,因为它很容易说明。当您拥有时,SELECT ColumnName = 1
我认为很容易将其误认为是在那些漫长而疲惫的夜晚设置变量。您可能会误以为SELECT @ColumnName = 1
那将是完全不同的功能。因此,为了避免查询“重看”的任何可能性,或更糟糕的是...理解/编码错误,我花了SELECT 1 as ColumnName
100%的时间。
个人喜好,但始终如一(对于您自己和您的团队)是至高无上的。无论您发现最简单的什么,都可以随时随地进行。没有什么比来回切换某些人进行故障排除/查看/维护代码更令人沮丧的了。
第三种未提及的方法是使用<Expression> <Alias>
。换句话说,您的第二种方式没有as
关键字。我认为这和=
符号一样糟糕。它缺乏可读性,无法获得什么?不要输入三个额外的字符(as
和一个空格)。不值得。
出于夸张的目的,请看一下这样的查询:
use AdventureWorks2012;
go
select
[New Name] = Name,
NewDepId = DepartmentID,
GroupName as GName,
ModifiedDate MyModDate
from HumanResources.Department;
不是我要检查的代码。
我个人觉得alias = expression
更容易阅读和理解。原因是,当我对SELECT
包含冗长表达式的语句进行故障排除时,我可能想通过列名而不是其他方式查找表达式。快速,找到应用程序看到的表达式alias2
:
SELECT
alias1 = (long expression with aggregates and multiple column references),
(long expression with aggregates and multiple column references AS alias2
FROM ...
那是我的偏爱。您的可能会有所不同。除了主观/品味方面的原因外,使用其他任何一种都没有真正的优势。重要的是,您要选择一种方法并始终如一地进行操作(除非您掷硬币,否则在遇到喜欢另一种方法的人时能够捍卫自己的选择)。但是,如果您像我一样为DBA编写繁琐的代码,请准备好对其进行重写。:-)
我觉得更强大的一件事是在别名名称周围使用单引号,例如
column AS 'alias'
'alias' = column
不建议使用一种格式,但是两种格式都很难阅读-许多新手都将别名误认为是字符串文字,因为这就是它的样子。基于相同的原因,我绝对不赞成使用双引号("alias"
)。如果您因为别名是保留字或选择或格式化错误而需要对别名进行转义,请使用[square brackets]
。
as <Alias>
放在列定义的最后一行。但绝对可以同意,它就像您喜欢咖啡一样个性。
AS Alias
,AS
则在我垂直扫描特定表名时不是很有用。我敢打赌我们也不会同意在哪里放置逗号。:-)
AS
因为这是我们现在使用的(我通常在此之前添加一个换行符,AS ColumnName
以便它们大致对齐),但是我同意=
在更长的列定义中它更具可读性。