oracle分页改写为mysql_mysql和oracle分页

mysql分页

关键字limit,limit m,n 其中m表示起始位置的下标,下标从0开始。n表示要显示的条数,比如要查询一个表的第2到5条数据。

select * from emp limit 1,4;

c682eaa88d6a6b28ea049b17b2be59e4.png

oracle分页

关键字rownum, rownum表示返回数据的行号。使用它需谨慎,不能用rownum大于(大于1的数值)、大于等于(大于或等于1的数值)、=(大于或等于1的数值),否则无结果。

select count(*) from gcfr_t_vch a where rownum>1;

运行结果如下:

bfd85ed672d86bd6a2df7c3d4dcd645a.png

实际上这个表里是有数据的,理论上应该是能查出来数据的。但是为什么没有出来呢?

这是因为:

1、ROWNUM是伪列,必须要要有返回结果后,每条返回记录就会对应产生一个ROWNUM数值;

2、返回结果记录的ROWNUM是从1开始排序的,因此第一条始终是1;

这样,当查询到第一条记录时,该记录的ROWNUM为1,但条件要求ROWNUM>1,因此不符合,继续查询下一条;因为前面没有符合要求的记录,因此下一条记录过来后,其ROWNUM还是为1,如此循环,就不会产生结果。

备注:当使用“>、>=、=、between...and”这些条件时,从缓冲区或数据文件中得到的第一条记录的rownum为1,不符合sql语句的条件,会被删除,接着取下条。

上述查询可以通过子查询来替代:

select count(*) from ( select guid,rownum r from gcfr_t_vch t ) tt where tt.r >1

d00a209e354d7f0983190d351e416ff2.png

常见使用:

--rownum关键字:oracle对外提供的自动给查询结果编号的关键字,与每行的数据没有关系。

--注意:rownum关键字只能做< <=的判断,不能进行> >=的判断

select rownum ,e.* from emp e;

--查询员工信息的前5条数据 第一页数据

select rownum r,e.* from emp e where rownum <=5;

select * from (select rownum r,e.* from emp e where rownum <=5) t where r>0;

--查询员工信息的6-10条数据 第二页数据

select rownum r,e.* from emp e where rownum <=10;

select rownum,t.* from (select rownum r,e.* from emp e where rownum <=10) t where r>5;

--查询员工信息的11-15条数据 第三页数据

select rownum r,e. * from emp e where rownum<=15;

select * from (select rownum r,e. * from emp e where rownum<=15) t where r>10;

--分页规律总结:每页显示m条数据,查询第n页数据

select * from (select rownum r,e. * from 要分页的表 e where rownum<=m*n) t where r>m*n-m ;

--要分页的表既可以是真实的表,也可以是一个查询语句

--分页查询员工信息按照工资排序

select * from (select rownum r,t.* from (select * from emp  order by sal) t where rownum<=10 ) where r>5

原文出处:

oracle和mysql分页, 土豆Z120553, https://www.cnblogs.com/hkdpp/p/8327857.html

oracle的分页查询, 愚蠢的程序员, https://www.cnblogs.com/wuxu/p/11198764.html

Oracle中的rownum不能使用大于>的问题, 我不会游泳, https://www.cnblogs.com/antis/p/6740777.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值