课程 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_name 和 last_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_name 和 last_name 列以创建全名,并为结果列分配别名 "Full Name"。
SELECT first_name || ' ' || last_name AS "Full Name"
FROM actor;
注意:
||运算符用于 SQLite 和 PostgreSQL 中的字符串连接。其他数据库可能使用不同的运算符或函数(例如,SQL Server 中的+,MySQL 中的CONCAT()函数)。
本课程的关键要点:
- 列别名为查询结果集中的列提供临时的描述性名称。
- 使用
AS关键字(或简单的空格)来创建别名。 - 用双引号 (
") 括起包含空格或特殊字符的别名。 - 别名提高可读性,简化列名,避免歧义,并且对计算列至关重要。 在下一个模块中,我们将探讨如何使用 函数 进一步操作和转换查询中的数据。