2. 列别名与计算字段
任务说明
在SQL查询中,原始列名往往不够直观,且经常需要对已有列进行算术运算、字符串拼接或逻辑转换后输出。本案例要求:基于一张员工表,使用列别名(AS)与计算字段完成三类查询——①为原始列赋予语义化别名;②基于年薪列计算月薪并输出;③拼接姓名与部门生成描述字段。所有查询需在一条完整的可执行SQL中体现,并给出可验证的判定标准。
数据准备
执行以下建表与插入语句,准备测试数据(适用于MySQL 8.0+ / PostgreSQL / SQLite):
CREATE TABLE employee (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(50),
dept VARCHAR(30),
salary DECIMAL(10,2) -- 年薪
);
INSERT INTO employee VALUES
(1, '张伟', '研发部', 240000.00),
(2, '李娜', '市场部', 180000.00),
(3, '王强', '研发部', 300000.00),
(4, '赵敏', '人事部', 150000.00);
核心SQL实现
以下查询同时演示三种别名/计算字段用法,并统一输出结果集:
SELECT
emp_id AS "员工编号",
emp_name AS "员工姓名",
dept AS "所属部门",
salary AS "年薪",
ROUND(salary / 12, 2) AS "月薪",
CONCAT(emp_name, ' - ', dept) AS "姓名部门描述"
FROM employee
ORDER BY salary DESC;
代码说明
- 列别名:通过
AS将emp_id、emp_name、dept、salary分别重命名为中文语义名称,便于阅读与后续程序引用。 - 计算字段(算术):
salary / 12将年薪转换为月薪,外层ROUND(..., 2)保留两位小数,别名月薪。 - 计算字段(字符串拼接):
CONCAT(emp_name, ' - ', dept)生成组合描述,别名姓名部门描述。 - 排序:
ORDER BY salary DESC按年薪降序排列,便于人工核对计算字段与源数据的对应关系。
执行与验证
运行方式:在已导入上述数据的数据库客户端中,直接执行核心SQL语句。
预期输出(按salary降序,共4行):
员工编号 | 员工姓名 | 所属部门 | 年薪 | 月薪 | 姓名部门描述
---------|---------|---------|----------|---------|----------------
3 | 王强 | 研发部 | 300000.00| 25000.00| 王强 - 研发部
1 | 张伟 | 研发部 | 240000.00| 20000.00| 张伟 - 研发部
2 | 李娜 | 市场部 | 180000.00| 15000.00| 李娜 - 市场部
4 | 赵敏 | 人事部 | 150000.00| 12500.00| 赵敏 - 人事部
判定标准:
- 结果集包含5列,列标题与别名完全一致(含中文引号内名称);
- “月薪”列数值 = 对应“年薪”列 ÷ 12,且四舍五入保留2位小数(如300000/12=25000.00);
- “姓名部门描述”列格式严格为
员工姓名 - 部门,中间含空格与连字符; - 行序按年薪从高到低排列。
常见注意事项
- 别名中的中文建议使用双引号(标准SQL)或反引号(MySQL),避免与保留字冲突;
- 计算字段中
salary / 12结果可能为多位小数,务必使用ROUND显式控制精度; CONCAT在MySQL/SQLite中直接可用,PostgreSQL需使用||运算符或CONCAT函数(本案例语法兼容MySQL与SQLite)。