- 列出薪水水平处于第四位的员工。
思路:要找到薪水处于第四位的员工,那么首先我们先要对薪水进行一个排序。
select * from emp order by sal desc
这里要找到排名第四的员工就需要借助rownum—>伪列
我们先看看伪列到底是什么
select rownum,emp.* from emp ;
这里的rownum和前面的序号一摸一样
那么如果我们对薪水进行排序,再看看rownum会不会变呢
select rownum, emp.* from emp order by sal desc;
我们可以看到当我们对sal这一列进行排序之后,rownum也随之变化了,也就是说rownum是和对应的行绑定的。这里的绑定也就是和我们的emp的顺序是对应起来的。那么我们如何才能取出排名第四的员工呢。
那么我们就需要对已经排好序的这张表当作一张新的emp1,取他的伪列。
select rownum,emp1.* from (select * from emp order by sal desc) emp1 ;
现在我们可以看到排名第四的员工对应的伪列号也是4了
其实我们现在可以总结一下,对于rownum来说,它的序列号就是对应的最原始的表,不包括排序之类的,所以如果我们需要排序之后的伪列号,那么我么就需要将排序之后的表当作一种新的表,把新的表当作原始的表。
那么接下要取出第四的员工,那么我将再将包括rownum的表当作一个新的表emp2,我们只需要一个where语句r=4就可以取出了
select emp2.* from (
select rownum r ,emp1.* from (select * from emp order by sal desc) emp1 ) emp2
where r=4;
`` `
很奇怪的是这里必须要对rownum重命名,才可以,不知道为啥
那么我们总结一下:这里我们需要对emp进行两次重命名,第一次是在对薪水排序之后进行重命名,显示对应的伪列,然后第二次重命名是将有伪列的看成一张新的表emp2,取出排名第四的员工
1. 查找EMP表中前5条记录
我们要找到前5条记录只需要将where语句里面rownum<=5就行了
select rownum, emp.* from emp where rownum<=5;
注意如果前面有rownum,那么这里的*前面就需要添加表名。
![这里写图片描述](https://img-blog.csdn.net/20170730213613296?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3FpdV9jcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1. 找EMP表中10条以后的记录。
select emp1.* from(
select rownum r,emp.* from emp) emp1
where r >10;
![这里写图片描述](https://img-blog.csdn.net/20170730214159343?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3FpdV9jcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1. 查找EMP表中薪水第5高的员工。
select emp2.* from(
select rownum r,emp1.* from(
select * from emp order by sal desc) emp1) emp2
where r =5;
思路和前面的一样这里我就不再赘述了
1. 查找EMP表部门30中薪水第3的员工。
select emp2.* from (
select rownum r,emp1.* from (
select * from emp where deptno=30 order by sal desc) emp1) emp2
where r =3
![这里写图片描述](https://img-blog.csdn.net/20170730215243400?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3FpdV9jcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1. 查找EMP表中每部门薪水前3的员工。
select emp2.* from(
select rownum r,emp1.* from (
select * from emp order by sal desc) emp1) emp2
where r <=3;
“`
那么对于rownum的总结就到这里了,欢迎指教