PostgreSQL 别名(Alias)详解

在 PostgreSQL 中,别名(Alias) 主要用于给 表(Table) 或 列(Column) 赋予临时名称,使 SQL 语句更加简洁易读。别名只在查询语句执行时有效,不会影响数据库的实际结构。
1. 列别名(Column Alias)
语法:
SELECT column_name AS alias_name FROM table_name;
或(AS
关键字可以省略):
SELECT column_name alias_name FROM table_name;
示例:
假设有一个 employees
表:
CREATE TABLE employees (
emp_id SERIAL PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
salary DECIMAL(10, 2)
);
INSERT INTO employees (first_name, last_name, salary) VALUES
('Alice', 'Smith', 5000),
('Bob', 'Johnson', 6000),
('Charlie', 'Brown', 7000);
使用列别名:
SELECT first_name AS "First Name", last_name AS "Last Name", salary * 12 AS "Annual Salary"
FROM employees;
结果:
First Name | Last Name | Annual Salary |
---|---|---|
Alice | Smith | 60000 |
Bob | Johnson | 72000 |
Charlie | Brown | 84000 |
注意:
- 如果别名包含 空格或特殊字符,必须用
双引号
""
包裹。 AS
关键字可以省略,但建议使用,提高可读性。
2. 表别名(Table Alias)
语法:
SELECT column_name FROM table_name AS alias_name;
或:
SELECT column_name FROM table_name alias_name;
示例:
SELECT e.first_name, e.last_name, e.salary
FROM employees AS e;
或省略 AS
:
SELECT e.first_name, e.last_name, e.salary
FROM employees e;
结果:
first_name | last_name | salary |
---|---|---|
Alice | Smith | 5000 |
Bob | Johnson | 6000 |
Charlie | Brown | 7000 |
为什么使用表别名?
- 适用于 多表 JOIN 时,简化表名,提高 SQL 语句的可读性。
- 避免表名过长导致的冗余。
3. 在 JOIN 语句中使用表别名
如果没有别名,每次都要写完整表名:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
JOIN departments ON employees.emp_id = departments.emp_id;
使用表别名优化:
SELECT e.first_name, e.last_name, d.department_name
FROM employees e
JOIN departments d ON e.emp_id = d.emp_id;
这样可以减少代码冗余,使 SQL 语句更清晰。
4. 在子查询中使用别名
在子查询中,别名可以给临时计算出来的表起名,以便后续查询使用:
SELECT emp_name, total_salary
FROM (
SELECT first_name || ' ' || last_name AS emp_name, salary * 12 AS total_salary
FROM employees
) AS emp_summary
WHERE total_salary > 70000;
这里 emp_summary
作为子查询的临时表别名,可以在外层查询中使用。
5. 在 CASE 语句中使用别名
SELECT first_name, last_name,
CASE
WHEN salary > 6000 THEN 'High'
WHEN salary BETWEEN 4000 AND 6000 THEN 'Medium'
ELSE 'Low'
END AS salary_level
FROM employees;
结果:
first_name | last_name | salary_level |
---|---|---|
Alice | Smith | Medium |
Bob | Johnson | High |
Charlie | Brown | High |
6. 在计算字段中使用别名
SELECT first_name, last_name, salary, salary * 1.1 AS new_salary
FROM employees;
结果:
first_name | last_name | salary | new_salary |
---|---|---|---|
Alice | Smith | 5000 | 5500 |
Bob | Johnson | 6000 | 6600 |
Charlie | Brown | 7000 | 7700 |
7. 在 GROUP BY 和 ORDER BY 中使用别名
别名 不能 在 GROUP BY
和 ORDER BY
中直接使用,必须用 列编号或原字段名。
SELECT first_name, COUNT(*) AS emp_count
FROM employees
GROUP BY first_name;
但在 ORDER BY
中,可以使用别名:
SELECT first_name, salary AS monthly_salary
FROM employees
ORDER BY monthly_salary DESC;
总结
方式 | 语法示例 | 作用 |
---|---|---|
列别名 | SELECT column_name AS alias_name FROM table; | 让查询结果更清晰 |
表别名 | SELECT e.column_name FROM table_name e; | 让 SQL 语句更简洁,尤其是 JOIN 时 |
子查询别名 | SELECT * FROM (SELECT ...) AS alias_name; | 让临时表有名称,方便外层查询 |
计算字段别名 | SELECT salary * 12 AS yearly_salary; | 为计算结果赋名称 |
CASE 语句别名 | CASE ... END AS alias_name | 让分类数据更直观 |
更多详细内容请关注其他相关文章!