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

SELECT *FROM tablename order by column1,column2,column3 ;
如果不显示指出是升序还是降序,则默认为是升序








oracle数据库中order by用法

oracle数据库中order by的一些高级用法
现有一个表,表内容如下:
这里写图片描述

以下的操作都是对该表进行的操作
1.按照名称排序(默认为升序)

  • 实现代码:
select * from dp_tourist order by cnname;

 
 
  • 1
  • 实现效果:
    这里写图片描述

2.按照名称升序排序

  • 实现代码:
select * from dp_tourist order by  cnname asc;

 
 
  • 1
  • 实现效果:
    这里写图片描述

3.按照名称降序排序

  • 实现代码:
select * from dp_tourist order by  cnname desc;

 
 
  • 1
  • 实现效果:
    这里写图片描述

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

  • 实现代码:
select * from dp_tourist order by  cnname desc,id desc;

 
 
  • 1
  • 实现效果:
    这里写图片描述

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;

 
 
  • 1
  • 实现效果:
    这里写图片描述

5.2将null放在最后

  • 实现代码:
select * from dp_tourist order by cnname desc nulls last;

 
 
  • 1
  • 实现效果:
    这里写图片描述

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);

 
 
  • 1
  • 2
  • 3
  • 实现效果:
    这里写图片描述
    6.2方法二:
  • 实现代码:
select * from dp_tourist 
order by 
case
  when cnname like '%深圳%' then 0
  else  1
end,cnname asc;

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 实现效果:
    这里写图片描述
  • 比较: 方法1中,null值不存在,方法2中,null值存在

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

  • 实现代码:
select * from dp_tourist order by decode(id, 94,4); 

 
 
  • 1
  • 实现效果:
    这里写图片描述

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

  • 实现代码:
select * from dp_tourist order by decode(id, 94,4), id desc; 

 
 
  • 1
  • 实现效果:
    这里写图片描述

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;

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
                                </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值