首页 > 解决方案 > 在 select 子句中使用 equals 设置列别名

问题描述

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

一种

Select [ColumnAlias] = Column1 FROM Table

通常我使用

Select Column1 AS [ColumnAlias] FROM Table

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

有什么理由更喜欢 B 而不是 A?我似乎在 A 搜索中找不到太多内容。

标签: sqlcolumn-alias

解决方案


没有多少 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

所有 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

AS(或省略)适用于表的别名

SELECT Column1 AS [alias] from Table as t
SELECT Column1 [alias] FROM Table t
SELECT Column1 alias FROM Table [t]

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

SELECT Column1 AS 'alias' from Table AS 't'
SELECT [alias] = Column1 FROM t = Table

对于查询中的任何类型的别名,使用AS是所有表中最常支持的语法,而不仅仅是列。出于这个原因,您会发现它也是最常记录的语法。


推荐阅读