MySQL 排序与分页实战:3 道经典练习题解析
MySQL 排序与分页实战:3 道经典练习题解析
排序(ORDER BY)和分页(LIMIT)是 MySQL 查询中处理结果集的核心操作,常用于数据展示、报表生成等场景。本文通过 3 道实战练习题,详解排序与分页的组合用法,帮你掌握复杂结果集的处理技巧。
一、多条件排序:按年薪和姓名组合排序
题目 1
查询员工的姓名、部门号和年薪,按年薪降序、姓名升序显示。
解决方案
1 | SELECT |
知识点解析
计算字段与别名:salary * 12 计算年薪,用 AS 定义别名 annual_sal,简化排序条件;
多列排序规则:
- 先按第一个字段(annual_sal)排序,DESC 表示降序;
- 当第一个字段值相同时,再按第二个字段(last_name)排序,ASC 表示升序(默认可省略);
- 排序依据:支持使用计算字段或别名排序,无需重复写计算逻辑(如直接用 annual_sal 而非 salary*12)。
二、条件筛选 + 排序 + 分页:精准提取指定范围数据
题目 2
选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第 21 到 40 位置的数据。
解决方案
1 | SELECT |
知识点解析
范围筛选:NOT BETWEEN 8000 AND 17000 等价于 salary < 8000 OR salary > 17000,用于排除指定区间的数据;
分页逻辑:
- LIMIT 偏移量, 行数 中,偏移量从 0 开始计数;
- 第 21 到 40 条记录:偏移量 = 20(前 20 条跳过),行数 = 20(取 20 条);
- 执行顺序:先筛选(WHERE)、再排序(ORDER BY)、最后分页(LIMIT),确保分页基于筛选后的有序结果。
三、函数 + 排序:按字段长度排序
题目 3
查询邮箱中包含字母e的员工信息,先按邮箱的字节数降序,再按部门号升序。
解决方案
1 | SELECT |
知识点解析
- 模糊筛选:
- email REGEXP ‘[e]’ 与 email LIKE ‘%e%’ 功能相同,均匹配包含e的邮箱;
- REGEXP 支持更复杂的正则匹配,LIKE 适合简单通配符场景;
字符串长度函数:LENGTH(email) 计算邮箱的字节数(注意:中文在不同编码下字节数可能不同,此处针对英文邮箱);
多维度排序:先按 “邮箱长度” 这一动态计算值排序,再按 “部门号” 这一字段排序,满足复杂业务需求。
总结:排序与分页核心要点
操作场景 | 关键语法 / 函数 | 注意事项 |
---|---|---|
多列排序 | ORDER BY 字段1 DESC, 字段2 | 先按字段 1 排序,值相同时再按字段 2 排序 |
分页查询 | LIMIT 偏移量, 行数 | 偏移量从 0 开始,需结合ORDER BY确保顺序 |
范围筛选 | BETWEEN…AND/NOT BETWEEN | 闭区间包含边界值,反向筛选用NOT |
字符串长度计算 | LENGTH(字段) | 返回字节数,适合英文等单字节字符 |
模糊匹配 | LIKE ‘%e%’/REGEXP ‘[e]’ | 简单场景用LIKE,复杂模式用REGEXP |
通过这 3 道题可以看出,排序与分页很少单独使用,通常需结合条件筛选、函数计算等操作。掌握它们的组合逻辑,能帮你高效处理各类结果集展示需求,无论是前端列表分页还是后台数据导出,都能应对自如。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 蝴蝶效应!
评论