龙空技术网

Oracle学习日记——给查询结果排序

小詹小詹 130

前言:

今天小伙伴们对“oracle取排序后的前100”大概比较关心,朋友们都想要剖析一些“oracle取排序后的前100”的相关资讯。那么小编同时在网络上网罗了一些有关“oracle取排序后的前100””的相关文章,希望咱们能喜欢,看官们快快来学习一下吧!

1.以指定的顺序返回查询结果

在实际查询中,我们通常会以指定的次序返回查询结果

两种写法:

1.和所查询的列的保持一致,

select name,borndate,salary from emp order by salary

2.按照查询的列的序号来排序,工资是第三列

select name,borndate,salary from emp order by 3

默认排序是从小到大

select name,borndate,salary from emp order by 3 asc; asc表示从小到大排序(顺序)

select name,borndate,salary from emp order by 3 desc; desc表示从大到小(逆序)

3.按多个字段排序

eg:按照部门编码升序,按照工资降序排列

select name,sal,deptno from emp order by deptno asc,sal desc;

4.按子串排列

用函数substr()把需要排序的字符截取出来即可

select name 员工姓名, phone_number 手机号码, sal 工资, substr(phone_number,-4) 尾号

from employees where rownum <= 5 order by 4;

5.TRANSLATE和REPLACE ORACLE中的替换函数

TRANSLATE的用法:

TRANSLATE(参数1,参数2,参数3),3个参数均为字符类型的数据

eg:select translate('ab 你好 bcadefg','abcdefg','1234567') as new_str from dual;

查询结果:

new_str

12 你好 2314567

'abcdefg','1234567'两个字符中 1替换a 2替换b 依次类推,按顺序替换;

如果参数3为空值,即'',则返回结果为空值

REPLACE的用法:

REPLACE(char, search_string,replacement_string)

解释:char 中 包含 search_string 的部分全都用 replacement_string 替换

eg:

select replace('abcdefg','bdc','234') new_str from dual;

输出结果:

new_str

a234efg

6.按数字和字母混合字符串中的字母排序

eg:数据库中有一列的数据既有数字,又有字母,需要按照字母排序

思路:用translate函数把这一列数据中的数字全都替换成空值,然后按照替换后的列进行排序;

7.处理排序空值

Oracle排序默认空值排在最后,如果我们想要把空值排在前面,如何处理?

两种种处理方法

(1).nvl(列,给列赋的值)

eg:给工资的空值的赋值为-1

select nvl(salary,-1) as salary from emp order by salary;

缺点:

需要对数据库的列和其中的值特别熟悉,一旦其中的值有变化,就需要重新写语句;

(2).nulls first 和 nulls last

nulls first:空值在前

eg:select name,deptno,salary from emp order by 3 nulls first;

nulls last:空值在后

eg: select name ,deptno,salary from emp order by 3 nulls last;

8.根据条件取不同列中的值来排序:

比如,领导希望工资在1000到2000之间的员工信息排在前面,以便查看

处理方法,可以重新生成1列,用sase when

select empno 员工编码,

empname 员工姓名,

case when salary >= 1000 and salary <= 2000 then 1 else 2 end as 级别,

salary 工资是第三列

from emp

where deptno = 30

order by 3,4;

也可以不显示结果,把case when 放到order by 中

select empno 员工编码,

empname 员工姓名,

salary 工资是第三列

from emp

where deptno = 30

order by

case when salary >= 1000 and salary <= 2000 then 1 else 2 end,3;

Oracle学习日记——单表查询

标签: #oracle取排序后的前100 #oracle取排序后的前后两条 #oracle提取字母和数字 #oracle如何截取后五位 #oracle截取数字前几位