博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle的分页查询
阅读量:6982 次
发布时间:2019-06-27

本文共 1732 字,大约阅读时间需要 5 分钟。

  hot3.png

    因为Oracle不像MySQL一样有limit函数来实现分页查找,oracle要实现分页查询可使用关键字rownum来处理。使用rownum有以下几点需要注意:

1、ROWNUM存在使用规则,在单个子查询中,对于WHERE中的ROWNUM限制只能使用<或者<=;

2、ROWNUM用于从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀;

    下面通过rownum的三种方式来实现oracle的多表分页查询(单表也一样):

1、通过子查询的方式

select *

from (select row_.*, rownum rownum_
        from (select u.login_name,u.name,d.name as name1,s.name as name2,s.url 
                from site_admin ad left join user u on ad.user_id = u.id 
                left join site s on ad.site_id = s.id 
                left join department d on u.dept_id = d.id) row_
        where rownum <= 10)
where rownum_ > 0;

这里有一个点需要注意:当多表关联中有涉及到两张表都有同一个名称的字段是,如:

173324_Ciiu_3506479.png

那么,需要将其他的同名称的字段取一个别名用来区分,否则查询会报错:ambiguous fields...

2、minus关键字-多次查询

select u.login_name,u.name,u.sex,u.mobile,u.phone,u.email,d.name,s.name,s.url 

from site_admin ad left join user u on ad.user_id = u.id 
left join site s on ad.site_id = s.id 
left join department d on u.dept_id = d.id where rownum <=10
minus
select u.login_name,u.name,d.name,s.name,s.url 
from site_admin ad left join user u on ad.user_id = u.id 
left join site s on ad.site_id = s.id 
left join department d on u.dept_id = d.id where rownum <=5;

上面的sql中,查的是6~10的记录,就把前10条记录减去前5条记录,但是这个看起来太啰嗦也很冗长,不太建议。

3、between...and...以及排序

select *

from (select row_.*, rownum rownum_
        from (select u.login_name,u.name,d.name as name1,s.name as name2,s.url 
                from site_admin ad left join user u on ad.user_id = u.id 
                left join site s on ad.site_id = s.id 
                left join department d on u.dept_id = d.id
                order by u.name asc) row_) b
where b.rownum_ between 0 and 10;

通过子查询并且用between...and...方法也可以完成分页查询的操作,并且,有子查询,我们可以对查询结果进行排序,因为生成的rownum在order by操作的前面,为了保证排序结果一致,需要先执行order by操作,这样查询之后的排序结果会一致,第三种方法可以说是第一种方法的优化。

 

欢迎加入java交流群:280097991。

 

转载于:https://my.oschina.net/varus/blog/1594737

你可能感兴趣的文章
如何用C#写一个简单的Login窗口
查看>>
Sharepoint学习笔记—习题系列--70-576习题解析 -(Q141-Q143)
查看>>
sudo配置文件/etc/sudoers格式
查看>>
【Django】Django 如何使用 Django设置的日志?
查看>>
span设置padding无效
查看>>
RGB、HSB、HSL 互相转换算法
查看>>
【转】外企高管们的“中年危机”
查看>>
HeapAlloc 和 GlobalAlloc 以及 VirtualAlloc 三者之间的关系(转)
查看>>
你一定不知道IDE里的Tomcat是怎么工作的
查看>>
Typescript 2+迷你书 :从入门到不放弃
查看>>
Android studio 跟踪 Gradle Task 执行
查看>>
Java面试通关要点汇总集
查看>>
从源码角度理解Handler、Looper、MessageQueue之间关系
查看>>
Bitmap 比你想的更费内存 | 吊打 OOM
查看>>
为你揭秘小程序音视频背后的故事......
查看>>
自定义侧边快速索引栏
查看>>
一种自动化检测 Flash 中 XSS 方法的探讨
查看>>
基于环信sdk实现简单即时聊天
查看>>
Java基础-Synchronized原理
查看>>
大道至简,阿里巴巴敏捷教练的电子看板诞生记
查看>>