对数据查询结果集截断获取,来实现数据库层的分页。在mysql以及Oracle下的实现如下:

MySQL下使用limit和offset,Oracle使用Rownum。

MySQL下limit和offset的两种写法:

  • SELECT * FROM tablex LIMIT[offset,] rows
  • SELECT * FROM tablex LIMIT rows OFFSET 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相同功能:

  • SELECT * FROM table WHERE ROWNUM<10;

但不要想当然的认为实现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

 

发表评论