在 select 子句中使用 equals 设置列别名

w00*_*ngy 4 sql column-alias

今天我看到有人使用这种语法(A)在 sql select 中设置列​​别名。

A

Select [ColumnAlias] = Column1 FROM Table
Run Code Online (Sandbox Code Playgroud)

通常我使用

Select Column1 AS [ColumnAlias] FROM Table
Run Code Online (Sandbox Code Playgroud)

我曾经=设置局部变量,但从未设置为别名。Select @LocalVar = Column1 FROM Table

有什么理由比 A 更喜欢 B 吗?我似乎在 A 搜索中找不到太多信息。

Chr*_*ler 5

没有多少 RDBMS 支持equals语法,但 VB/C# 应用程序开发人员通常使用它,然后学习 MS SQL Server,因为它与为变量赋值相似,这当然是看待它的一种方式,尽管我找不到参考,该语法可能是为了鼓励开发人员采用MS SQL平台而采用的。

问题是这种用法是不明确的,因为可以使用相同的语法将列的值实际分配给变量,或者在语句中将UPDATE值分配给另一列:

-- assign the variable the value from Column1
SELECT @MyVar = Column1 FROM Table

-- Update Column2 with the value from Column1
UPDATE Column2 = Column1 FROM Table

Run Code Online (Sandbox Code Playgroud)

所有 SQL RDBMS 都支持使用AS关键字,它的歧义性要小得多,因为类似的语法只存在于CAST函数内部。

AS更具表现力,意图很明确,不会被误认为是作业。

使用AS也被认为更标准,因为相同的语法可用于在 SQL 查询中为表、视图和其他记录集添加别名。

值得注意的是,AS在大多数 RDBMS 中,这在技术上是可选的,因此您可以完全忽略它,但这样做可能会导致其他问题,特别是如果您要使用的别名实际上作为列或表的真实名称存在。使用“AS”的原因记录如下: https: //www.databasestar.com/sql-alias/

因此,虽然这些变体都可以为 SQL Server 中的列添加别名:

SELECT Column1 AS [alias] from Table
SELECT Column1 AS 'alias' from Table
SELECT Column1 [alias] FROM Table
SELECT [alias] = Column1 FROM Table
Run Code Online (Sandbox Code Playgroud)

AS(或省略它)适用于为表添加别名

SELECT Column1 AS [alias] from Table as t
SELECT Column1 [alias] FROM Table t
SELECT Column1 alias FROM Table [t]
Run Code Online (Sandbox Code Playgroud)

以下不适用于表别名
请注意,我们不能将表别名为字符串值,它必须是标记化名称

SELECT Column1 AS 'alias' from Table AS 't'
SELECT [alias] = Column1 FROM t = Table
Run Code Online (Sandbox Code Playgroud)

对于查询中的任何类型的别名(而不仅仅是列),UsingAS是所有表中最常支持的语法。因此,您会发现它也是最常见的记录语法。