mysql sqlserver oracel分页sql语句

项目一直都用的hibernate,很少对分页查询写sql语句,这次做项目用的mybatis,mybatis的内部分页不是很好,用的是jdbc的游标移动,它是基于内存分页的,所以要自己写sql语句,就总结一下几种主流数据库的分页写法
[size=x-large]1. mysql[/size]
mysql的分页比较简单,mysql数据库提供了分页处理的关键字 例如表的名称叫 procuct
 select * from product limit 0,10     

limit 后面是两个整数,第一个整数是开始的行号,第二个是要取得数据的记录数,比如上面的sql语句会查询出第一条到第十条记录,它是从开始行号的下一条开始取数据的。
[size=x-large]2. sql server[/size]
sql server 的分页语句稍微复杂点,假如表中有字段 id 用top实现
 select top pageSize  * from product where id not in (select top (pageNow - 1) * pageSize  id from product  order by id) order by id 

pagesize 就是要取得的记录条数,不过这样的效率不是很高,随着页数的增加速度会慢
sql server 2005 提供了row_number 和over by 函数也可以实现分页
  select * from (select row_number() over by(id)   
rownum t.* from (select * from product) t where rownum <= pageNow * pageSize)where rownum > (pagenow - 1)* pageSize)

效率还是挺高的 比上面用top效率高,不过只用sql 2005 版本以上的数据库管理系统支持。
[size=x-large]2.oracle[/size]
oracle是用三层嵌套来实现的 ,一直很纳闷,为什么oracel公司不做的简单的,像 mysql 那样多好,不知道为什么要搞这么复杂,oracel为查询的记录提供了一个虚拟列,叫rownum,就是行号
 select * from (select rownum,   
t.* from (select * from product) t where rownum <= pageNow * pageSize)where rownum > (pagenow - 1)* pageSize)

挺复杂的,希望oracel也提供像mysql 那样的分页sql语句
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值