为什么80%的码农都做不了架构师?>>>   

因为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;

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

那么,需要将其他的同名称的字段取一个别名用来区分,否则查询会报错: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

Oracle的分页查询相关推荐

  1. Oracle中分页查询语句

    Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用. ...

  2. Oracle之分页查询

    2019独角兽企业重金招聘Python工程师标准>>> Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. 分页查询格式 SELECT * FROM ( SELECT ...

  3. oracle查询实现分页,Oracle实现分页查询的SQL语法汇总

    本文实例汇总了Oracle实现分页查询的sql语法,整理给大家供大家参考之用,详情如下: 1.无ORDER BY排序的写法.(效率最高) 经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据 ...

  4. oracle spring 分页查询,SpringJDBC 调用oracle 通用存储过程分页

    我博客前面有写道SpringJDBC调用通用的Oracle存储过程,今天来讲一下通用的Java存储过程带分页的功能,其中里面还有动态查询的SQL拼接,好的,先上代码 1.Java代码 @Autowir ...

  5. oracle高效分页查询总结

    本文参考链接:http://blog.sina.com.cn/s/blog_8604ca230100vro9.html 探索查询语句: --分页参数:size = 20 page = 2 --没有or ...

  6. sql server与oracle的分页,详解SQLServer和Oracle的分页查询

    不管是DRP中的分页查询代码的实现还是面试题中看到的关于分页查询的考察,都给我一个提示:分页查询是重要的.当数据量大的时候是必须考虑的.之前一直没有花时间停下来好好总结这里.现在又将Oracle视频中 ...

  7. oracle数据库分页查询慢,Oracle数据库中分页查询中排序及效率问题

    原始未分页查询Sql代码如下: select ROWNUM rn, t.id ID, o.name YYB,u.name XM, t.MC from tZDYSX t,tuser u,lborgani ...

  8. oracle分页怎么查询,Oracle的分页查询

    因为Oracle不像MySQL一样有limit函数来实现分页查找,oracle要实现分页查询可使用关键字rownum来处理.使用rownum有以下几点需要注意: 1.ROWNUM存在使用规则,在单个子 ...

  9. 使用oracle数据库分页查询语句,各种数据库的分页查询语句

    各种数据库的分页查询语句 1.oracle数据库分页select * from (select a.*,rownum rc from 表名 where rownum=endrow) a where a ...

最新文章

  1. 【已解决】tomcat报严重: Socket accept failed
  2. python imshow彩色_python中plt.imshow与cv2.imshow显示颜色问题
  3. BZOJ 3994 [SDOI2015]约数个数和 (莫比乌斯反演)
  4. 网络分析(带权并查集)
  5. Homebrew OS X 不可或缺的套件管理器
  6. 编程是一门实践性的科学
  7. VScode中编写运行C/html文件
  8. android 退出应用,如何停止服务,Android 完全退出当前应用程序的四种方法
  9. Python工作笔记005---旧式字符串格式化_%5.3f的含义
  10. 【图神经网络】ChebyNet-切比雪夫多项式近似图卷积核
  11. 尚学堂第十一章多线程习题答案
  12. sql查询每科成绩最高的人和分数
  13. Messenger:使用消息的跨进程通信 (Message.replyTo()的使用)
  14. 第二部分 项目管理标准
  15. 日期转换 NSDate 格式 格林尼治时间 时差
  16. python RF使用笔记
  17. 机器人运动学---雅克比矩阵伪逆
  18. 会玩,有人用 Python 模拟导弹防御!
  19. java第九章第一题_Java第九章第五题
  20. 打死都不要进外包,看看我在阿里外包的2年…

热门文章

  1. stm32时钟树讲解
  2. 20步打造最安全的Nginx Web服务器
  3. Widgets 整理
  4. 更新 FrameWork
  5. 关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题
  6. java中读取properties文件内容五种方式
  7. 201521123016《Java程序设计》第12周学习总结
  8. 关于Less的学习笔记
  9. super返回不过来
  10. 12th,Jan 研究生创新项目申报成功