一.MySQL数据库
先从MySQL数据库说起,MySQL数据库中实现分页相对简单,因为MySQL数据库中提供了非常好用的limit函数
limit 使用语法:
limit [a],[b]
a:代表从第几个数开始向后查询(0对应的是数据库的第一行)
b:代表每次查询返回的总条数
一般来说
a设置为(当前页数 - 1)* 单页数据大小
b设置为 单页数据大小
二.Oracle数据库
Oracle数据库实现分页相对MySQL数据库较为繁琐,因为Oracle数据库不支持limit函数,所以我们使用rownum来控制
方法一:
–第一步,查询出所有信息,并根据工资排序
SELECT sal, ename, FROM emp WHERE sal IS NOT NULL order by sal
– 第二步,取得排序后的序号,过滤掉10行以后的数据
SELECT rownum AS rn, sal, ename
FROM(
SELECT sal, ename, FROM emp WHERE sal IS NOT NULL order by sal
) x
WHERE rownum <= 10
–第三步,在前10行数据中再过滤掉6行以前的数据
SELECT rn AS 序号, ename AS 姓名, sal AS 工资
FROM(
SELECT rownum AS rn, sal, ename
FROM(
SELECT sal, ename, FROM emp WHERE sal IS NOT NULL order by sal
)
WHERE rownum <= 10
)
WHERE rn >= 6
方法二:
SELECT rn AS 序号, ename AS 姓名, sal AS 工资
FROM(
SELECT rownum AS rn, sal, ename
FROM(
SELECT sal, ename, FROM emp WHERE sal IS NOT NULL order by sal
)
) a
WHERE a.rn between 6 and 10
在这里为什么不直接在第一步就取出rownum呢?因为如果第一步就取出rownum
SELECT rownum as rn, sal, ename, FROM emp WHERE sal IS NOT NULL order by sal
这条查询语句执行的顺序是:先取出数据(包括rownum),再排序。所以取出来的数据可能是这样的:
rn sal ename
1 3000 TOM
4 2888 JONES
15 2560 FORD
21 1300 ADAMS
3 900 SIMTH
...
在第二步中取出rownum能保证rownum为排序后的rownum(1,2,3,4,…),而不是排序之前的rownum。