MySQL 基础:数据排序与常用单行函数实战
本文详细介绍 MySQL 中数据的排序操作与常用的单行处理函数。通过实际案例演示如何使用 ORDER BY 实现单字段、多字段的升序与降序排列,以及结合 WHERE 子句的复合筛选。同时深入解析 LOWER/UPPER、SUBSTR、CONCAT、LENGTH、TRIM、ROUND 等字符串及数值函数的具体用法,帮助开发者高效完成数据查询与分析。
1. 数据排序
在 SQL 查询中,ORDER BY 子句用于对结果集进行排序。默认情况下,MySQL 按照升序(ASC)排列数据,若需降序排列,则需显式指定 DESC。
第 1 步:执行单字段排序
目的:按单一条件对结果集进行排序。
操作方法:
例如,查看员工表中的姓名与薪资,并按薪资从低到高排序:
select ename, sal from emp order by sal;
-- 输出示例:
+--------+---------+
| ename | sal |
+--------+---------+
| SMITH | 800.00 |
| JAMES | 950.00 |
...
| KING | 5000.00 |
+--------+---------+
若希望按薪资从高到低显示,添加 DESC 关键字:
select ename, sal from emp order by sal desc;
第 2 步:多字段组合排序
目的:当主排序键值相同时,使用次级排序键确定顺序。
操作方法:
例如,先按薪资升序排列,对于薪资相同的员工,再按姓名降序排列:
select ename, sal from emp order by sal, ename desc;
第 3 步:结合条件进行排序
目的:在满足特定筛选条件(WHERE)的结果集上进行排序。
操作方法:
查找薪资在 1250 至 3500 之间的人员信息,并按薪资降序排列:
select ename, sal from emp
where sal between 1250 and 3500
order by sal desc;
2. 单行处理函数
单行函数是指对每一行输入数据处理后返回一个结果(一对一映射)。这类函数常用于数据清洗、格式转换及计算。NVL(expr1, expr2) 或 IFNULL() 用于处理 NULL 值。
内容转小写
使用 LOWER(str) 将字符串转换为小写。
select lower(ename) from emp;
内容转大写
使用 UPPER(str) 将字符串转换为大写。
select upper(ename) from emp;
取子串
使用 SUBSTR(str, start, length) 提取子字符串。第一个参数为起始位置,第二个参数为截取长度。
示例:获取每个姓名的首字母:
select substr(ename, 1, 1) from emp;
字符串拼接
使用 CONCAT(str1, str2, ...) 连接多个字符串。
示例:拼接员工编号与姓名:
select concat(empno, ename) from emp;
求字符长度
使用 LENGTH(str) 返回字符串的字节长度或字符数(取决于编码配置)。
示例:统计各姓名的长度:
select length(ename) from emp;
去除前后空白
使用 TRIM([LEADING|TRAILING|BOTH] 'char' FROM str) 清理字符串两端的空白或非目标字符。
示例:在搜索时忽略尾部空格的影响:
select * from emp where ename = trim('KING ');
数值四舍五入
使用 ROUND(n, d) 对数值进行四舍五入,d 保留的小数位数。
示例:保留整数部分:
select round(123.456, 0) from emp;
生成随机数
使用 RAND() 生成 0 到 1 之间的随机浮点数。
select rand() from emp;
空值处理(CASE WHEN)
在实际业务中,数据库常包含 NULL 值。直接对 NULL 参与运算会导致结果为 NULL。通常使用 DECODE 或 CASE WHEN 替代 NVL 来进行复杂的空值替换与逻辑判断。
示例:根据不同职位计算预期年薪(基于月薪乘系数),处理奖金为空的情况:
select ename, job, sal,
(case job
when 'MANAGER' then sal*1.1
when 'SALESMAN' then sal*1.5
else sal*1.2
end) as newsal
from emp;
以上就是 MySQL 数据库排序与单行处理函数详解的详细内容,更多关于 MySQL 排序技巧与 SQL 数据处理优化的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













