在SQL中查询指定列并重命名字段需用AS关键字或空格定义别名,支持表达式和函数结果,含特殊字符时需加引号包裹,且别名仅在当前查询有效,WHERE/HAVING中不可使用。

在SQL中查询指定列并重命名字段,只需在 SELECT 子句中使用 AS 关键字(或直接空格)为列指定别名即可。
基本语法:用 AS 给字段起别名
这是最清晰、推荐的方式:
- SELECT 列名 AS 新名字 FROM 表名;
- 例如:SELECT name AS 姓名, age AS 年龄 FROM users;
- AS 可省略,但保留更易读:SELECT name 姓名, age 年龄 FROM users;
给表达式或函数结果起别名
计算字段、字符串拼接、聚合函数等也支持别名:
- SELECT CONCAT(first_name, ' ', last_name) AS 全名 FROM employees;
- SELECT COUNT(*) AS 总记录数 FROM orders WHERE status = 'completed';
- SELECT price * quantity AS 订单金额 FROM order_items;
别名中含空格或特殊字符的处理
如果别名含空格、中文、连字符或关键字,需用反引号(MySQL)、双引号(PostgreSQL/SQL Server)或方括号(SQL Server)包裹:
- MySQL:SELECT name AS `用户姓名` FROM users;
- PostgreSQL:SELECT name AS "用户 姓名" FROM users;
- SQL Server:SELECT name AS [用户姓名] FROM users;
注意事项与常见问题
别名只在当前查询结果中生效,不影响原表结构;ORDER BY 和 GROUP BY 中可直接使用别名(多数数据库支持),但 WHERE 和 HAVING 中不能使用——因为它们执行顺序早于 SELECT:
- ✅ 正确:SELECT salary * 12 AS annual_salary FROM staff ORDER BY annual_salary;
- ❌ 错误:SELECT salary * 12 AS annual_salary FROM staff WHERE annual_salary > 60000;(应写成 WHERE salary * 12 > 60000)










