mysql和oracle分页注意点

来源:互联网 发布:小视频修改软件 编辑:程序博客网 时间:2024/06/05 04:26

这里首先说下oracle分页不像mysql分页那么简单直接limit 就可以了.
mysql:sql ="select * from talbe limit 0,10";
第一个数表示下标,就是从第几条数据开始,
第二个数表示每页显示多少条数据,可以说是当你确定每页显示多少行时候,它就是一个固定的数。
这里需要注意的是,mysql的访问下标是从0开始的。这个一定要记住。

下面说说oracle,oracle的分页就比较麻烦些了.

oracle是没有id自增长的,我们要首先要对我们自己在表自建的id创建个序列

select * from table(Book) order by B_id //第一步什么呢?
我oracle表中的B_id先
按照arder by 排序下,就是在oracle中是没有id自增长的,中间容易出现断层


第二步

我们把上面的第一个的语句作为一个条件用括弧括起来,那么第一个sql语句相当于一个视图,我们为了方便,在给他一个别名。m就是这个视图的别名,
这里我们知道oracle里面排序时通过“rownum”的关键字,我们也给他起个别名叫rn,就是后面伪列的名字;
这样我们执行下面的语句,会产生一个伪列,rn,当然一个伪列和B_id是不一样的
B_id会出现裂缝,断层,但是这个伪列是不会的。即便B_id中间断层,rn这个伪列永远
是按照1,2,3,...10....排序的,而且是自增长的。
其实在oracle里面进行真分页,oracle就是按照伪列实现的。


select m.*,ROWNUM rn from (select * from table(Book) order by B_id ) m

第三步
我们要做的还是和第二步的差不多,我们还是要把刚才的语句作为一个条件,用括弧
括起来,后面加where条件 between and 伪列从那到那,这个主要对rn伪列的操作。
这里和mysql区别是有点大的。

select * from (select m.*,ROWNUM rn from (select * from table(Book) order by B_id ) m)rn where between 1 and 10;


当然写法很多不只一种


select * from (select m.*,ROWNUM rn from (select * from table(Book) order by B_id ) m where ROWNUM <=10)where rn>=1 ;

后面的算法要高些。

 

 

 

 

个人笔记不断改善....谢谢

原创粉丝点击