2.1以指定顺序返回查询结果(显示编号部门为10的员工的姓名、职位和工资,并根据工资从低到高排序)
select ename,job,sal from emp order by sal asc;
select ename,job,sal from emp order by 3 asc;(3指第三列)
2.2多字段排序(按照deptno升序,sal降序)
select deptno,ename,sal from emp order by deptno asc,sal desc;
2.3依据子串排序(按照职位字符的最后三个字符对检索结果进行排序)
select ename,job from emp order by substr(job,length(job)-2);
2.4对含有字母和数字的列排序(有混含了字母和数字的数据,希望按照字母部分或者数字部分来排序。如下所示的视图)
create view V as select ename ||’ ‘||deptno as data from emp;
select * from V;
按照数字:select data from V order by replace(data,replace(translate(data,‘0123456789’,’##########’),’#’,’’),’’);
按照字母:select data from V order by replace(translate(data,‘0123456789’,’##########’),’#’,’’);
select translate(data,‘0123456789’,’##########’)from V; //SMITH ##
select replace(translate(data,‘0123456789’,’##########’),’#’,’’) from V;//SMITH
select replace(data,replace(translate(data,‘0123456789’,’##########’),’#’,’’),’’) from V;//20
replace和trannslate都是替代函数:replace针对的是字符串,translate针对的是单个字符
2.5排序示对null的处理(按照emp表的comm列对查询结果进行排序,但该字段可能为null,需要将null排在后面)
select ename,comm from(select ename,comm,case when comm is null then 1 else 0 end as is_null from emp) order by is_null,comm;
select ename,comm from emp order by comm nulls last;(oracle9版本之后)
2.6依据条件逻辑动态调整排序项(如果job等于salesman,按照comm排序,否则按照sal排序)
select ename,job,comm,sal from emp order by case when job=‘SALESMAN’ then comm else sal end;
--《SQL经典实例》笔记