oracle12c order by,oracle 数据库中order by 的一些高级用法
发布日期:2021-06-24 11:22:12 浏览次数:3 分类:技术文章

本文共 1710 字,大约阅读时间需要 5 分钟。

oracle数据库中order by用法

oracle数据库中order by的一些高级用法

现有一个表,表内容如下:

176104229_1_20191121105333736

以下的操作都是对该表进行的操作

1.按照名称排序(默认为升序)

实现代码:

select * from dp_tourist order by cnname;

实现效果:

176104229_2_20191121105333861

2.按照名称升序排序

实现代码:

select * from dp_tourist order by cnname asc;

实现效果:

176104229_3_20191121105333939

3.按照名称降序排序

实现代码:

select * from dp_tourist order by cnname desc;

实现效果:

176104229_4_201911211053341

4.先按照名称降序排序,如果名称有一样的,则按照id降序排序

实现代码:

select * from dp_tourist order by cnname desc,id desc;

实现效果:

176104229_5_2019112110533464

5.缺省处理:oracle在order by时认为null是最大值, 所以如果是asc升序则排在最后, desc降序则排在最前.我们可以使用nulls first或者nulls last来控制null的位置。

5.1将null放在最前

实现代码:

select * from dp_tourist order by cnname asc nulls first;

实现效果:

176104229_6_20191121105334126

5.2将null放在最后

实现代码:

select * from dp_tourist order by cnname desc nulls last;

实现效果:

176104229_7_20191121105334267

6.名称有带“深圳”的先显示,其余的按照名称升序排序

6.1方法一:

实现代码:

select * from dp_tourist d1 where d1.cnname like '%深圳%'

Union all

select * from (select * from dp_tourist d2 where d2.cnname not like '%深圳%' order by d2.CNNAME asc);

实现效果:

176104229_8_20191121105334923

6.2方法二:

实现代码:

select * from dp_tourist

order by

case

when cnname like '%深圳%' then 0

else 1

end,cnname asc;

实现效果:

176104229_9_20191121105334970

比较: 方法1中,null值不存在,方法2中,null值存在

7.按照id为94的排到第一位

实现代码:

select * from dp_tourist order by decode(id, 94,4);

实现效果:

176104229_10_2019112110533533

8.按照id为94的排到第一位,其余按照id降序排序

实现代码:

select * from dp_tourist order by decode(id, 94,4), id desc;

实现效果:

176104229_11_2019112110533595

9.把id当成分数,按照分数等级排序

DECODE函数的语法:DECODE(value,if1,then1,if2,then2,if3,then3,…,else);

DECODE函数说明:表示如果value等于if1时,DECODE函数的结果返回then1,…,如果不等于任何一个if值,则返回else。

**sign函数语法:sign(n); **

**sign函数说明:取数字n的符号,大于0返回1,小于0返回-1,等于0返回0(n可以是表达式,(n-200))。 **

实现代码:

select id 评分,cnname 名称, decode(sign(id-85),1,'优秀',0,'优秀',-1,

decode(sign(id-70),1,'良好',0,'良好',-1,

decode(sign(id-60),1,'及格',0,'及格',-1,'不及格'))) 成绩

from dp_tourist

order by

case

when 成绩='优秀' then 0

when 成绩='良好' then 1

when 成绩='及格' then 2

when 成绩='不及格' then 3

else 4

end,id asc;

转载地址:https://blog.csdn.net/weixin_32467749/article/details/116343533 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解
下一篇:oracle比较强大的函数,SQL和ORACLE函数比较

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月21日 21时34分07秒