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

两者都会导致:

名字 中间名字
詹姆士 约翰 工匠
约翰 詹姆士 约翰逊
迈克尔 马库斯 威廉姆斯

此语句将返回具有给定名称(别名)的 FNameLName 列。这是使用 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

从这些保留字(SELECTFROM)创建别名。

这将导致执行时出现大量错误。