对数据查询结果集截断获取,来实现数据库层的分页。在mysql以及Oracle下的实现如下:
MySQL下使用limit和offset,Oracle使用Rownum。
MySQL下limit和offset的两种写法:
例如:
//查询学生表中年龄大于10岁的同学,从记录行21开始返回结果,最大返回10条记录。 select * from student where age>10 limit 20,10 //或这样写 select * from student where age>10 limit 10 offset 20
ORACLE数据库使用ROWNUM来实现LIMIT相同功能:
但不要想当然的认为实现OFFSET功能就是简单的ROWNUM>5 and ROWNUM<10。好吧,最初我也是这么认为的,但是ORACLE的ROWNUM实现认为这个条件不成立。常见的写法有下面几种:
//方法1: SELECT * FROM tablex WHERE rowid NOT IN(SELECT rowid FROM tablex WHERE ROWNUM<=5) and ROWNUM<=10 //方法2: SELECT * FROM (SELECT A.*, ROWNUM r FROM (SELECT * FROM tablex) A WHERE ROWNUM <= 10) B WHERE r > 5 //方法3: SELECT * FROM table WHERE ROWNUM<10 MINUS SELECT * FROM table WHERE ROWNUM<5