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

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

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

98a34dd8d77c1cc627e09d3f3c94fb1a.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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值