这是我从网上总结出来的,记下来避免忘记
第一种方法 速度会快点,在tab1这层先过滤掉了一部分数据,方法成本最低,只嵌套一层,速度最快,即使查询的数据量再大,也几乎不受影响,速度依然
--分页查询1
SELECT
TAB2.*
FROM
(
SELECT
tab1.*, ROWNUM as row_num
FROM
(
--把需要分页的sql直接放进来就行了
SELECT
t.*
FROM
T_T_DEPT t
) TAB1
WHERE
ROWNUM<20
) TAB2
WHERE
TAB2.row_num >10
第二种方法 随着查询范围的扩大,速度也会越来越慢,因为排了序
--分页查询2
SELECT
TAB2.*
FROM
(
SELECT
tab1.*, ROWNUM as row_num
FROM
(
--把需要分页的sql直接放进来就行了
SELECT
t.*
FROM
T_T_DEPT t
ORDER BY Name
) TAB1
WHERE
ROWNUM<20
) TAB2
WHERE
TAB2.row_num >10
第三种方法 到最外层再进行处理,不建议
--分页查询3
SELECT
TAB2.*
FROM
(
SELECT
tab1.*, ROWNUM as row_num
FROM
(
--把需要分页的sql直接放进来就行了
SELECT
t.*
FROM
T_T_DEPT t
) TAB1
) TAB2
--11与20之间
WHERE
TAB2.row_num
BETWEEN
11
AND
20
第四种方法 这种能排序,运行久了也不会变慢
SELECT * FROM(SELECT
TAB2.*
FROM
(
SELECT
tab1.*, row_number() over(order by 列名) as rownumber
FROM
(
--把需要分页的sql直接放进来就行了
你的sql语句
) TAB1
) TAB2
WHERE
TAB2.rownumber> 10)
WHERE
rownum <= 20