PostgreSQL 别名(Alias)详解
                           
天天向上
发布: 2025-03-12 23:36:28

原创
285 人浏览过

在 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 NameLast NameAnnual Salary
AliceSmith60000
BobJohnson72000
CharlieBrown84000

注意

  • 如果别名包含 空格或特殊字符,必须用 双引号 "" 包裹。
  • 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_namelast_namesalary
AliceSmith5000
BobJohnson6000
CharlieBrown7000

为什么使用表别名?

  • 适用于 多表 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_namelast_namesalary_level
AliceSmithMedium
BobJohnsonHigh
CharlieBrownHigh

6. 在计算字段中使用别名

SELECT first_name, last_name, salary, salary * 1.1 AS new_salary
FROM employees;

结果

first_namelast_namesalarynew_salary
AliceSmith50005500
BobJohnson60006600
CharlieBrown70007700

7. 在 GROUP BY 和 ORDER BY 中使用别名

别名 不能GROUP BYORDER 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让分类数据更直观

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *