SQL Cookbook 系列 -查询结果排序

  1. 以指定次序返回查询结果
  2. 按多个字段排序
  3. 按子串排序
  4. 对字母数字混合的数据排序
  5. 处理排序空值
  6. 根据数据项的键排序

1.以指定次序返回查询结果
select ename,job from emp order by ename
字符串值的字典序排列?
网上找到的答案:ASCII码

2.按多个字段排序
select * from emp order by ename asc,job desc;

3.按照子串排序
db2,mysql,oracle,postgreSQL 采用:
select ename,job from emp order by substr(job,start,length);
sqlserver 采用:
select ename,job from emp order by substring(job,len(job)-2,2);

Note: 子串是比较少用的,新内容


4.对字母数字混合的数据排序,这个部分的功能只有部分数据库管理系统支持
oracle postgreSQL :
select data from V order by replace(data,
replace(translate(data,'0123456789','##########'),'#',''),'');
这部分的替换用到了两个函数,第一次是tanslate,将某些匹配格式中的数据转
换为一些字符,统一替换掉,然后就很明显了
db2:
select * from (select ename|| ' ' || cast (deptno as char(2)) as data from emp ) v
order by replace(translate(data,'#########',‘0123456789’),‘#’,‘’);
mysql和sqlserver不支持translate函数,无法提供针对这个问题的解决方案

Note:以前项目中在oracle数据库的SQL中遇到过,现在才明白,不算迟到


5.处理排序空值
db2,mysql,postgreSQL,sqlserver一般采用case表达式来处理
select ename,job,comm from (select ename,job,comm case when comm is null then 0 else 1 end as is_null from emp) x order by is_null desc,comm;
oracle采用自己的处理方式:
select ename,job,comm from emp order by comm nulls first;
select ename,job.comm from emp order by comm nulls last;

Note:null值的排序在数据库中均是进行转换之后做排序处理的



6.根据数据项的键排序
select ename,sal,comm,case when job='saleman'
then comm else sal end as ordered from emp
order by ordered;

Note:根据格式化后的数据字段进行排序的








猜你喜欢

转载自blog.csdn.net/seacean2000/article/details/80748504