oracle分页查询

刚接触oracle分页的时候,我被他那个sql语句搞得倍儿的晕。后来总结了一下,其实oracle的分页是按照三层过滤来进行分页查询的。它是怎样一个三层过滤法呢?接下来我通过一个小小的案例来说明一下。

我们先看看我们要操作的表的结构吧,上图。。。。

图1         

oracle分页查询_第1张图片

雇员表,字段很容易理解,不多说。。。

接下来我们来对这个表进行一个查询,要求是这样子的:请查询出emp表中薪水大于1000的第5到第10条数据,并按照薪水排序

很明显了,这是一个分页查询,按照刚才所说的,我们就按照三层过滤的形式一步一步来操作

第一步:先对查询条件进行过滤,把结果当成第一个临时表t1

      查询条件是什么:薪水大于1000并按照薪水排序

       这个要求对我们来说是非常简单的,sql语句是这么写的:

        select * from emp where sal >= 1000 order by sal;

       我们来看看查询结果:图2

        oracle分页查询_第2张图片

       对照图1的查询结果,数据少了两条,并且已经按照薪水排序。

        Ok,第一步过滤就完成了。

第二步:对前10条数据进行过滤,并把结果当成第二个临时表t2

        先看sql语句:select t1.*,rownum rn from (select * from emp where sal >= 1000 order by sal )t1 where rownum <= 10;

        解释一下:rownum是oracle在创建表是自动帮我们创建的一个字段,用于标识每条记录的编号。

        我们来看看查询结果:图3

        oracle分页查询_第3张图片

        从查询结果我们可以看出,相比图2,图3的结果少了第11和12条记录,也就是查询了前10条记录   

        到此第二步也就完成了,我们再来看看最后一层过滤。

第三步:对10条数据前的(10-5)条数据进行过滤,最后显示结果

       先看sql语句:select t2.* from (select t1.*,rownum rn from ( select * from emp where sal >= 1000 order by sal )t1 where rownum <= 10)t2 where rn >= 5; 

       再来看看结果:图4
       oracle分页查询_第4张图片
       结果出来了!

按照上边对分页查询的sql语句的分解,相信大家再次看到oracle的分页查询语句就不会那么头疼了。
最后总结一下:其实第三步的sql语句完全可以当成一个模版来使用,请看

select t2.* from (select t1.*,rownum rn from ( select * from emp where sal >= 1000 order by sal )t1  where rownum <= 10 )t2 where rn >= 5; 

最里层那深绿色的sql语句,我们按需求只改表名,查询条件,其他不用修改。如果需要进行多表联合查询,也是在这一层完成的。
第二层那深蓝色的sql语句,我们按需求只改分页查询的右区间,即改数字10
最外层那红色的sql语句,我们按需求只改分页查询的左区间,即改数字5













你可能感兴趣的:(oracle,分页)