SQL 排序实战:顺序、倒序、多字段及特殊情况处理

何川
何川
发布时间:2026-10-15 | 6人浏览过
原创

掌握 SQL 的 ORDER BY 语法是实现数据可视化的基础。通过结合 ASC/DESC 关键字、多字段控制及函数逻辑,可精确定制查询结果的排列方式。

基本排序:升序与降序

SQL 中默认使用 ORDER BY 对查询结果进行排序。关键字 ASC 代表升序(Ascending),DESC 代表降序(Descending)。若未指定方向,默认通常表现为升序,但明确写出更为规范。

以下示例展示了如何按薪资(sal)从高到低(降序)查询员工姓名、职位和薪资:

SELECT ename, job, sal 
FROM emp 
WHERE deptno = 10 
ORDER BY sal DESC;

反之,若需按升序排列:

SELECT ename, job, sal 
FROM emp 
WHERE deptno = 10 
ORDER BY sal ASC;

高级排序技巧

第1步:多字段组合排序

当需要多个条件共同决定顺序时,可在 ORDER BY 后列出多个列名,用逗号分隔。系统会优先依据第一个列排序;若第一列值相同,则依据第二列排序,依此类推。

例如,先按部门编号(deptno)升序排列,若部门相同,再按薪资(sal)降序排列:

SELECT empno, deptno, sal, ename, job 
FROM emp 
ORDER BY deptno ASC, sal DESC;

第2步:基于字符串子串排序

某些场景下需要根据职位(job)等字符字段的特定部分进行排序。不同数据库的截取函数有所不同,以下是通用思路:

  • SQL Server: 使用 SUBSTRING(job, start, length)
  • Oracle/MySQL: 常用 SUBSTR 或 SUBSTRING

注意:SUBSTR 在不同数据库中的参数行为可能有差异(例如 Oracle 允许省略结束位置,而 MySQL 通常需要明确长度)。以下示例演示从职位字符串末尾向前截取两个字符进行排序的逻辑:

SELECT ename, job 
FROM emp 
ORDER BY SUBSTRING(job, LEN(job) - 2, 2);

执行此语句前,请根据实际使用的数据库引擎调整函数名称(如将 LEN 改为 LENGTH)。

第3步:动态条件排序

利用 CASE WHEN 表达式可以在排序时对不同数据进行差异化比较。例如:如果职位是 "SALESMAN"(销售员),则按佣金(comm)排序;否则按工资(sal)排序。

SELECT ename, sal, job, comm 
FROM emp 
ORDER BY CASE 
           WHEN job = 'SALESMAN' THEN comm 
           ELSE sal 
         END;

第4步:空值(NULL)处理与索引排序

在某些旧版本或非标准 SQL 环境中,可以通过列的序号引用进行排序。以下代码中 3 代表第三列(即 commission):

SELECT ename, job, comm 
FROM emp 
ORDER BY 3;

风险提示: 依赖列序号(ORDER BY 3)的代码可维护性较差,且不同数据库对 null 值的排序位置(前置或后置)处理不一。生产环境中建议始终使用明确的列名,并考虑使用 IS NULL 显式控制 null 值的显示位置。

以上就是关于 SQL 查询排序详细技术内容的介绍,更多关于 SQL 优化与实战技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表