MySQL 基础:数据排序与常用单行函数实战

周末不加班
周末不加班
发布时间:2026-10-15 | 3人浏览过
原创

本文详细介绍 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 数据处理优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表