mysql、oracle分页查询数据库

来源:互联网 发布:博拉网络ipo最新消息 编辑:程序博客网 时间:2024/04/26 23:44

一、mysql分页查询

select * from tableName where id limit (当前页码-1)*页面容量 , 页面容量

第一个参数:数据偏移量,当前页码从1开始。
第二个参数:每页的数据量。

二、oracle分页查询

SELECT *  FROM (SELECT t2.*, ROWNUM AS rowno          FROM (SELECT *                   FROM emp t1                   WHERE id > 10 ORDER BY id DESC) t2         WHERE ROWNUM <= 20) t3 WHERE t3.rowno >= 10;

这里是三层嵌套写法:select A(select B(select C))。这种写法在实际中比较实用,我们将外层的两层嵌套改写成固定的分页头和分页尾,而中间的部分则为正真的业务SQL,与分页处理进行分离,这样多个表都可以公用这段分页头和尾。

分页头:SELECT *  FROM (SELECT t2.*, ROWNUM AS rowno          FROM (分页尾:) t2    WHERE ROWNUM <= 页尾) t3        WHERE t3.rowno >= 页头;

还有一种两层的写法,这种写法比上面的效率要高一点,因为他少查询了一遍,但是两层写法不便于将分页代码分离出来,不利于维护。在数据量不是特别庞大的时候还是建议用三层写法,只有数据量特别大时才会有比较明显的效率区别。两层写法如下所示:

SELECT *  FROM (SELECT ROWNUM AS rowno, t1.*          FROM emp t1          WHERE id > 10 AND ROWNUM <= 20           ORDER BY id DESC) t2 WHERE t2.rowno >= 10;

另外补充一点关于ROWNUM 的知识,ROWNUM只能用以上符号(<、<=、!=),(>,>=,=,between..and)经常会查询不到结果或者结果莫名其妙。可以这样理解:ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between…and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。

1 0
原创粉丝点击