Skip to content

sql-alias-syntax

SQL 别名提供了一种在查询中为表或列赋予临时、更具描述性名称的方式。这通过使用 AS 关键字完成。别名对于提高查询可读性、处理名称模糊的列以及执行自连接(self-joins)至关重要。

列别名用于使结果集中的列标题更具用户友好性,或重命名表达式或聚合函数产生的列。

SELECT column_name AS alias_name
FROM table_name;

如果别名包含空格或特殊字符,它必须用双引号(标准 SQL)或方括号(SQL Server)括起来。

让我们检索客户信息,但为报告使用更具可读性的列名。

SELECT
ID AS "Customer ID",
NAME AS "Customer Name",
SALARY * 12 AS "Annual Salary"
FROM CUSTOMERS;
Customer IDCustomer NameAnnual Salary
1Ramesh24000.00
2Khilan18000.00
3Kaushik24000.00
………

表别名用于缩短查询中的表名,使其更简洁易读,尤其是在涉及多个连接(joins)的查询中。

SELECT c.ID, c.NAME, o.AMOUNT
FROM CUSTOMERS AS c
INNER JOIN ORDERS AS o ON c.ID = o.CUSTOMER_ID;

注意:在大多数 SQL 方言中,对于表别名,AS 关键字是可选的,但为了清晰起见,通常建议将其包含在内。

自连接是指表与其自身连接。表别名对于自连接是强制性的,以便数据库能够区分同一表的两个实例。

一个经典的用例是从单个 EMPLOYEES 表中查找薪资高于其经理的员工。

考虑一个 EMPLOYEES 表,其中每个员工都有一个 ManagerID,它引用同一表中另一个员工的 ID。

-- 示例 EMPLOYEES 表结构
CREATE TABLE EMPLOYEES (
ID INT PRIMARY KEY,
NAME VARCHAR(255) NOT NULL,
SALARY DECIMAL(10, 2),
ManagerID INT
);
-- 我们将该表与其自身连接,将一个实例视为“员工”,另一个实例视为“经理”。
SELECT
e.NAME AS "Employee Name",
e.SALARY AS "Employee Salary",
m.NAME AS "Manager Name",
m.SALARY AS "Manager Salary"
FROM
EMPLOYEES AS e
INNER JOIN
EMPLOYEES AS m ON e.ManagerID = m.ID
WHERE
e.SALARY > m.SALARY;

在此查询中,e 是员工记录的别名,m 是经理记录的别名。这使得我们可以在 WHERE 子句中清晰且无歧义地比较 e.SALARY 和 m.SALARY。

  • 保持一致性: 为您的别名使用一致的风格(例如,表的首字母,或简短、有意义的缩写)。
  • 保持清晰: 虽然像 c 和 o 这样的短别名很常见,但对于非常复杂的查询,使用更具描述性的别名如 cust 或 ord 可以提高可读性。
  • 限定所有列: 在使用连接时,最佳实践是为 SELECT 列表和 WHERE 子句中的每个列加上其表别名前缀(例如,c.ID 而不是仅仅 ID)。这可以防止歧义并使查询更易于维护。