Skip to content

PostgreSQL - 别名 (ALIAS) 语法

别名用于在特定查询中为表或列提供一个临时的、替代的名称。这对于提高复杂查询的可读性以及在最终结果集中重命名列非常有帮助。

列别名用于在输出中为列提供一个更具描述性的名称。AS 关键字用于定义别名。

语法如下:

SELECT column_name AS alias_name
FROM table_name;

如果你的别名包含空格或是一个保留关键字,你必须用双引号将其括起来。

SELECT annual_salary / 12 AS "Monthly Salary"
FROM employees;

表别名在对多个表执行 JOIN 操作时至关重要,尤其是在表中有同名列的情况下。它们为表创建一个简短的名称,使查询更短、更易读。

现代推荐的语法使用显式的 JOIN 关键字,这比旧式的逗号分隔 FROM 子句更清晰,也更不容易出错。

SELECT ...
FROM table1 AS t1
JOIN table2 AS t2 ON t1.common_column = t2.common_column;

注意:在 PostgreSQL 中,表别名的 AS 关键字是可选的,但为了清晰起见,最好将其包含在内。

示例:结合使用表别名和列别名

Section titled “示例:结合使用表别名和列别名”

让我们考虑两个表:employees 和 departments。

employees 表:

id | name | age | dept_id | salary
----+-------+-----+---------+--------
1 | Alice | 32 | 1 | 90000
2 | Bob | 25 | 2 | 65000
3 | Charlie| 28 | 1 | 85000

departments 表:

id | dept_name | location
----+-------------+----------
1 | Engineering | Building A
2 | Marketing | Building B

现在,让我们编写一个查询,列出每个员工的姓名、年龄和部门名称。我们将使用表别名(e 代表 employees,d 代表 departments)和输出的列别名。

SELECT
e.name AS employee_name,
e.age,
d.dept_name AS department
FROM
employees AS e
JOIN
departments AS d ON e.dept_id = d.id;

这比旧语法(FROM employees e, departments d WHERE e.dept_id = d.id)清晰得多,因为它将连接条件(ON ...)与过滤条件(通常在 WHERE 子句中)分开。

查询结果如下:

employee_name | age | department
---------------+-----+-------------
Alice | 32 | Engineering
Bob | 25 | Marketing
Charlie | 28 | Engineering
(3 rows)
  • 可读性: 它清楚地表明了连接表的意图,并将关系逻辑(ON)与数据过滤逻辑(WHERE)分开。
  • 可维护性: 添加、移除或更改连接更容易,而不会意外地创建笛卡尔积(交叉连接),这是旧的逗号分隔语法中常见的错误。
  • 功能性: 它是执行更复杂的外部连接(LEFT、RIGHT、FULL)的标准方式,而这在旧语法中是困难或不可能的。