MySQL和Oracle分页查询实现方式
MySQL和Oracle分页查询实现方式
蔡佳娃 发表于5个月前
MySQL和Oracle分页查询实现方式
  • 发表于 5个月前
  • 阅读 65
  • 收藏 3
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 介绍MySQL和Oracle下的分页查询实现方式,并说明了Oracle下ROWNUM的一些常识。

MySQL分页查询

    MySQL数据库实现分页比较简单,提供了limit函数,一般只需要直接写到sql后面既可以了。

    limit子句可以用来限制有select语句返回来的数据数量,它有一个或者两个参数,如果给出两个参数,第一个参数指定返回的第一行所有的数据中的位置,从0开始,第二个参数指定最多返回的行数。如:

#返回前10行
select * from table where ... limit 10;

#返回前10行
select * from table where ... limit 0, 10;

#返回第11-30行
select * from table where ... limit 10, 20;

Oracle分页查询

    在Oracle中没有limit关键字,但是有rownum字段,rownum是一个伪列,是Oracle系统自动为查询返回结果的每行分配的编号,第一行为1,第二行为2,以此类推...

    众所周知,rownum只适用于小于或者小于等于,如果进行等于判断,那么只能等于1,不能进行大于的比较。这是因为rownum的返回值总是从1开始,不管当前的记录是否满足查询结果,rownum的返回值都是1,如果这条记录最终满足所有的条件,那么rownum会递加,下一条记录的rownum就回返回2,否则下一条记录的rownum仍然返回1。明白了这个,就容易理解当rownum大于某个值或者等于某个不为1的值是无法返回结果的,因为对于每条记录的rownum都是1,而rownum为1不满足查询的结果,所以下一条记录的rownum不会递增,仍然是1,所以所有的记录都不满足条件。

    写法一:

select * from
    (select A.*, ROWNUM RN from (select * from table) A where ROWNUM <= 30) 
where RN >= 21;

    最内层的查询select * from table表示不进行翻页的原始查询语句。ROWNUM<=40和RN>=21控制分页查询每页的范围。

    写法二:

select * from
(select e.*, ROWNUM r from (select * from table) e) e1
where e1.r > 21 and e1.r <= 40;

 

共有 人打赏支持
粉丝 16
博文 54
码字总数 48865
×
蔡佳娃
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: