🙏 感谢您的支持! 我们在七月份已经筹集了 $65 — 这足够我们工作到下个月。请帮助我们保持进度,进一步支持这个项目。 支持这个项目 →
SQL 代码已复制到剪贴板

课程 2.4: 列别名

在之前的课程中,我们学习了如何从表中选择数据。有时,数据库中的默认列名并不是很具描述性,或者您可能想为计算出的列赋予一个新名称。这就是 列别名 的用武之地。

什么是列别名?

列别名允许您为 SELECT 查询的结果集中的列分配一个临时的替代名称。这不会改变表中列的实际名称;它仅影响列在查询输出中的显示方式。

语法

您可以使用 AS 关键字创建列别名,尽管它通常是可选的:

SELECT column_name AS alias_name
FROM table_name;

-- 或者(不使用 AS)

SELECT column_name alias_name
FROM table_name;
  • column_name: 您想要别名的列的名称。
  • AS alias_name: AS 关键字后跟所需的别名。
  • alias_name: 列的新临时名称。如果别名包含空格或特殊字符,则需要用双引号 (") 括起来。

列别名的优点

使用别名为数据展示和查询构建提供了几个好处:

  • 提高可读性: 别名可以使列名更具描述性,更易于理解,特别是在处理复杂查询或计算列时。
  • 简化列名: 如果列名很长或包含下划线,别名可以提供一个更短、更易管理的名称以用于结果集。
  • 避免歧义: 当连接具有相同名称的列的表时,别名可以帮助在输出中区分它们。
  • 创建更用户友好的输出: 别名允许您自定义结果集中的列标题,使其对最终用户或报告工具更有意义。
  • 处理计算列: 在创建计算列(例如,使用函数或表达式)时,别名是必不可少的,因为这些列没有固有名称。

关于可移植性的一个重要说明

在 SQL 中要小心别名的可见性。不同的数据库系统可能会有很大的不同:一个数据库可能允许在查询的某个部分使用别名,而另一个数据库在相同情况下可能会引发错误。

这在边缘情况下尤其重要,例如 HAVING、带 OVER 的窗口定义、SELECT 列表中的子查询以及其他更高级的表达式。在这些情况下,依赖一般直觉或其他 SQL 方言的习惯是不安全的。

作为一个实用规则,如果查询需要可移植性,请始终检查您特定数据库系统的文档或进行实验性测试。

示例

让我们看一些使用 Sakila 数据库结构的实际示例。

示例 1:基本别名

此查询从 actor 表中选择 first_namelast_name 列,但在结果集中将其显示为 "Given Name" 和 "Surname"。请注意使用双引号,因为别名包含空格。

SELECT first_name AS "Given Name", last_name AS "Surname"
FROM actor;

示例 2:别名计算列

此查询计算租赁持续时间(以天为单位),并为计算列分配别名 rental_duration

SELECT rental_date, return_date - rental_date AS rental_duration
FROM rental;

示例 3:使用连接的别名

此查询连接 first_namelast_name 列以创建全名,并为结果列分配别名 "Full Name"。

SELECT first_name || ' ' || last_name AS "Full Name"
FROM actor;

注意: || 运算符用于 SQLite 和 PostgreSQL 中的字符串连接。其他数据库可能使用不同的运算符或函数(例如,SQL Server 中的 +,MySQL 中的 CONCAT() 函数)。


本课程的关键要点:

  • 列别名为查询结果集中的列提供临时的描述性名称。
  • 使用 AS 关键字(或简单的空格)来创建别名。
  • 用双引号 (") 括起包含空格或特殊字符的别名。
  • 别名提高可读性,简化列名,避免歧义,并且对计算列至关重要。 在下一个模块中,我们将探讨如何使用 函数 进一步操作和转换查询中的数据。