🎯 本月只剩几天支持 SQLTest.online,帮助我们让 SQL 练习对每个人都免费。 今天捐赠 →
SQL 代码已复制到剪贴板

SQL 别名:使用 AS 重命名列

第 2.5 课 · 阅读时间:约 5 分钟 · 练习题 ↓

SQL 列别名是使用 AS 关键字为查询结果中的列指定的临时名称。在本课中,你将学习别名的语法、如何编写带空格的别名、为什么计算列需要别名,以及别名可以在查询的哪些部分使用。

在前面的课程中,你按照列在表中的原始名称来选择列。列名通常比较技术化,例如 rental_rate 或 replacement_cost,而像 length / 60 这样的计算值根本没有合适的名称。别名可以让你控制结果的列标题。

SQL 列别名:AS 关键字只在结果中重命名列,带空格的别名需要加引号,以及计算列的别名

什么是列别名?

列别名为 SELECT 查询结果中的列指定一个临时名称。它不会修改表中的列:别名只存在于本次查询的输出中。

基本语法

SELECT column_name AS alias_name
FROM table_name;

AS 关键字是可选的,所以 SELECT column_name alias_name 也可以运行。显式写出 AS 能让查询更易读,因为别名看起来不会像第二个列。


重命名列

SELECT title AS film_title,
       rental_rate AS price
FROM film;

结果:所有电影,两列名称为 film_title 和 price,而不是 title 和 rental_rate。


带空格的别名

如果别名包含空格或特殊字符,请用双引号将其括起来:

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

结果:演员列表,列标题为“Given Name”和“Surname”。

双引号是 SQL 标准。MySQL 和 MariaDB 也接受反引号(`Given Name`),SQL Server 接受方括号([Given Name])。实际工作中,不带空格的短名称(例如 given_name)在查询的后续部分更方便使用。


计算列的别名

当一列由表达式计算得出时,数据库会用表达式的文本生成列标题,例如 length / 60。别名可以为它提供一个合适的名称:

SELECT title,
       length AS length_minutes,
       length / 60 AS length_hours,
       rental_rate * rental_duration AS full_rental_cost
FROM film;

结果:每部电影的时长(分钟和小时),以及整个租期的租赁费用。

计算列是使用别名最常见的原因:没有别名,结果难以阅读,而按列名读取结果的应用程序也找不到对应的值。


别名可以在哪里使用

别名是在 SELECT 列表中创建的,因此只能在 SELECT 之后处理的查询部分中使用:

子句能否使用列别名?
ORDER BY可以,所有主流数据库都支持
WHERE不可以:WHERE 在 SELECT 之前处理
GROUP BY、HAVING取决于数据库(MySQL 和 PostgreSQL 允许在 GROUP BY 中使用)
SELECT title, rental_rate * rental_duration AS full_rental_cost
FROM film
ORDER BY full_rental_cost DESC;

结果:电影按完整租期费用从高到低排序。

如果查询需要在多种数据库中运行,请在 WHERE、GROUP BY 和 HAVING 中重复写出表达式,而不是使用别名。关于处理顺序的更多内容见第 2.7 课。


要点:

  • 列别名是查询结果中列的临时名称;表本身不会改变。
  • 使用 AS 编写别名:SELECT title AS film_title。关键字是可选的,但能提高可读性。
  • 带空格的别名请用双引号括起来:AS "Given Name"。
  • 为每个计算列指定别名。
  • 别名可以在 ORDER BY 中使用,但不能在 WHERE 中使用。

常见问题

SQL 中的别名必须使用 AS 关键字吗?

不必须。SELECT title film_title 与 SELECT title AS film_title 的效果相同。建议使用 AS,因为它能清楚地表明列在哪里结束、别名从哪里开始。

为什么不能在 WHERE 中使用列别名?

WHERE 在 SELECT 之前处理,因此在过滤行时别名还不存在。请在 WHERE 中重复写出表达式,或者在 SELECT 之后处理的 ORDER BY 中使用别名。

别名会重命名表中的列吗?

不会。别名只影响当前查询的结果。要重命名表本身的列,请使用 ALTER TABLE ... RENAME COLUMN。

尝试解决以下任务,以巩固您在本课中学到的内容。

  1. SQL 中的别名是什么?
  2. 会让查询出错的别名