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