在Oracle查询中获取已经根据条件排序好的数据(比如我要查询员工表,年龄根据从大往下排的顺序,然后再从中获取第几条数据到第几条的数据),思路其实已经很明显;
第一步:根据条件排序好;
例如:
select *
from employees
where manager_id>100
order by manager_id desc
第二步:把排序好的数据看成伪列数据;
第三步:在外面直接指定的第10条数据到第20的数据(rn>=10 and rn<=20);
思路步骤就如此,下面代码和运行结果:
思路一样但是方法有俩种写法:
第一种伪列语句:
关键字 rownum ;
Salary 是工资,employees 是员工表;
我这里查的是根据部门的员工id(employees_id)和工资就行分组,获取每组部门的最大工资,再根据各组部门的最大工资进行倒序排序,然后获取排在第6到第10的数据;
中间部分直接看成一列根据需要的条件和排序查询出来的数据,就因为这一点它才叫伪列,然后把伪列赋到rn上,进行获取指定的数据;
第一种的运行结果:
第二种伪列语句:
关键字:row_number() over();
注意:
- Orcale对大小写不敏感;
- Asc是顺序排序,默认可以不写;
- Desc是倒序排序;
这里查的是员工表,根据工资进行顺序排序,然后获取第10到20的员工数据;
第二种的运行结果:
伪列虽然少用,但是也是必须掌握的语法;相比于其他的数据库,orcale的排序是比较复杂的;