您的位置:首页 > 数据库 > Oracle

mysql、oracle分页查询数据库

2016-12-05 23:35 483 查看

一、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,又被删除,依次类推,便没有了数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle mysql 分页