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| 赵敏 - 人事部

判定标准:

  1. 结果集包含5列,列标题与别名完全一致(含中文引号内名称);
  2. “月薪”列数值 = 对应“年薪”列 ÷ 12,且四舍五入保留2位小数(如300000/12=25000.00);
  3. “姓名部门描述”列格式严格为员工姓名 - 部门,中间含空格与连字符;
  4. 行序按年薪从高到低排列。
列别名与计算字段 — 数据流与验证观测点 employee 表 emp_id (INT, PK) emp_name (VARCHAR) dept (VARCHAR) salary (DECIMAL) 1, 张伟, 研发部, 240000 2, 李娜, 市场部, 180000 3, 王强, 研发部, 300000 4, 赵敏, 人事部, 150000 SELECT 处理逻辑 ① 列别名 (AS) emp_id → 员工编号, dept → 所属部门 ② 计算字段 (算术) ROUND(salary/12, 2) → 月薪 ③ 计算字段 (拼接) CONCAT(emp_name,' - ',dept) ORDER BY salary DESC 结果集(验证点) 员工编号 | 员工姓名 | 所属部门 年薪 | 月薪 | 姓名部门描述 3 | 王强 | 研发部 | 300000.00 | 25000.00 | 王强 - 研发部 1 | 张伟 | 研发部 | 240000.00 | 20000.00 | 张伟 - 研发部 2 | 李娜 | 市场部 | 180000.00 | 15000.00 | 李娜 - 市场部 4 | 赵敏 | 人事部 | 150000.00 | 12500.00 | 赵敏 - 人事部 验证判定:①列名与别名一致 ②月薪=年薪÷12且保留2位小数 ③描述格式为“姓名 - 部门” ④按年薪降序

常见注意事项

  • 别名中的中文建议使用双引号(标准SQL)或反引号(MySQL),避免与保留字冲突;
  • 计算字段中salary / 12结果可能为多位小数,务必使用ROUND显式控制精度;
  • CONCAT在MySQL/SQLite中直接可用,PostgreSQL需使用||运算符或CONCAT函数(本案例语法兼容MySQL与SQLite)。