SELECT 使用列别名
列别名主要用于缩短代码并使列名更具可读性。
代码变得更短,因为可以避免长表名和不必要的列标识 (例如,表中可能有 2 个 ID,但在语句中只使用了一个 ID) 。除了表别名, 这允许你在数据库结构中使用更长的描述性名称,同时保持对该结构的查询简洁。
此外,有时需要它们,例如在视图中,以便命名计算输出。
所有版本的 SQL
可以使用双引号("
)在所有 SQL 版本中创建别名。
-sql langCopySELECT
FName AS "First Name",
MName AS "Middle Name",
LName AS "Last Name"
FROM Employees
不同版本的 SQL
你可以使用单引号('
),双引号("
)和方括号([]
)在 Microsoft SQL Server 中创建别名。
-sql langCopySELECT
FName AS "First Name",
MName AS 'Middle Name',
LName AS [Last Name]
FROM Employees
两者都会导致:
名字 | 中间名字 | 姓 |
---|---|---|
詹姆士 | 约翰 | 工匠 |
约翰 | 詹姆士 | 约翰逊 |
迈克尔 | 马库斯 | 威廉姆斯 |
此语句将返回具有给定名称(别名)的 FName
和 LName
列。这是使用 AS
运算符后跟别名,或者只是在列名后直接写别名来实现的。这意味着以下查询具有与上述相同的结果。
-sql langCopySELECT
FName "First Name",
MName "Middle Name",
LName "Last Name"
FROM Employees
名字 | 中间名字 | 姓 |
---|---|---|
詹姆士 | 约翰 | 工匠 |
约翰 | 詹姆士 | 约翰逊 |
迈克尔 | 马库斯 | 威廉姆斯 |
但是,显式版本(即使用 AS
运算符)更具可读性。
如果别名有一个不是保留字的单词,我们可以用单引号,双引号或括号来编写它:
-sql langCopySELECT
FName AS FirstName,
LName AS LastName
FROM Employees
名字 | 姓 |
---|---|
詹姆士 | 工匠 |
约翰 | 约翰逊 |
迈克尔 | 威廉姆斯 |
MS SQL Server 中可用的另一个变体是 <alias> = <column-or-calculation>
,例如:
-sql langCopySELECT FullName = FirstName + ' ' + LastName,
Addr1 = FullStreetAddress,
Addr2 = TownName
FROM CustomerDetails
这相当于:
-sql langCopySELECT FirstName + ' ' + LastName As FullName
FullStreetAddress As Addr1,
TownName As Addr2
FROM CustomerDetails
两者都会导致:
全名 | 地址 1 | ADDR2 |
---|---|---|
詹姆斯史密斯 | 123 AnyStreet | TownVille |
约翰约翰逊 | 668 MyRoad | 北京市东城 |
Michael Williams | 999 高端博士 | Williamsburgh |
有些人发现使用 =
而不是 As
更容易阅读,但很多人建议不要使用这种格式,主要是因为它不是标准的,所以没有得到所有数据库的广泛支持。它可能会导致与 =
字符的其他用法混淆。
所有版本的 SQL
此外,如果你需要使用保留字,可以使用括号或引号来转义:
-sql langCopySELECT
FName as "SELECT",
MName as "FROM",
LName as "WHERE"
FROM Employees
不同版本的 SQL
同样,你可以使用所有不同的方法在 MSSQL 中转义关键字:
-sql langCopySELECT
FName AS "SELECT",
MName AS 'FROM',
LName AS [WHERE]
FROM Employees
选择 | 从 | 哪里 |
---|---|---|
詹姆士 | 约翰 | 工匠 |
约翰 | 詹姆士 | 约翰逊 |
迈克尔 | 马库斯 | 威廉姆斯 |
此外,列别名可以用于同一查询的任何最终子句,例如 ORDER BY
:
-sql langCopySELECT
FName AS FirstName,
LName AS LastName
FROM
Employees
ORDER BY
LastName DESC
但是,你可能不会使用
-sql langCopySELECT
FName AS SELECT,
LName AS FROM
FROM
Employees
ORDER BY
LastName DESC
从这些保留字(SELECT
和 FROM
)创建别名。
这将导致执行时出现大量错误。