Oracle查询优化改写_2

对应的第二章”给查询结果排序“


1.按指定列排序
select ename,comm from emp order by comm ASC;

select ename,comm from emp order by 2 ASC;
--按照第二列排序
2.TRANSLATE函数
语法:

  TRANSLATE(string,from_str,to_str)

功能:

1. from_str和to_str以字符为单位,对应字符一一替换。

2. TRANSLATE是REPLACE所提供的功能的一个超集

3. 如果from_str比to_str长,那么在from_str中而不在to_str中而外的字符将从string中被删除,因为它们没有相应的替换字符.

4. to_str不能为空.Oracle把空字符串认为是NULL,并且如果TRANSLATE中的任何参数为NULL,那么结果也是NULL
3.数字和字母混合字符串的字母排序

此时可以使用到上述的 TRANSLATE函数。

select '7876 Andy' as aname,translate('7876 Andy','- 0123456789','-') as ename from dual
4.空值排序的问题

Oracle默认排序空值在后面,如果要把空值显示在前面,如何实现?

首先想到的是 nal,实现如下:

select ename,comm,nvl(comm,-1) order_col from emp order by 3;

上述的SQL的确可以实现这个功能。但是,必须关注排序列的数据类型。

其实,可以使用关键字

NULLS FIRST 和 NULLS LAST

来控制排序时,空值在前还是在后。

select ename,comm from emp order by 2 NULLS FIRST;
5.排序的列有条件限制

条件:领导对工资在1000—2000之间的员工更感兴趣,再按工资升序排列。

select empno AS 编码,ename AS 姓名,
    case when sal >=1000 and sal < 2000 then 1 else 2 end AS 级别,
    sal AS 工资
    from emp where deptno = 30 order by 3,4;

结果如下:

编码姓名级别工资
7654MARTIN11250
7521WARD11250
7499ALLEN11600
7900JAMES2950
7698BLAKE22850

也可以不显示级别,把 case when 放到 order by 中

select empno AS 编码,ename AS 姓名,
    sal AS 工资
    from emp where deptno = 30
    order by case when sal >=1000 and sal < 2000 then 1 else 2 end, 3;

结果如下:

编码姓名工资
7654MARTIN1250
7521WARD1250
7499ALLEN1600
7900JAMES950
7698BLAKE2850
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值