ROWNUM是伪列,只能<=,不能>=
所以需要给ROWNUM起个别名,变成逻辑列后来比较
select
from (select rownum as num,a from (select from test order by 1 asc) a) t
where tnum>=20
and tnum<=40;
你写的可以修改为:
select
from (select ROWNUM as num,A from (select from test) A where rownum <= 40)
where num >= 20;
sql语句如下:
分页1
SELECT
FROM (Select ROWNUM AS ROWNO, T
from 表名 T(别名)
where 表字段 between to_date('20060501', 'yyyymmdd') and to_date('20060731', 'yyyymmdd')
AND ROWNUM <= 20) TABLE_ALIAS
WHERE TABLE_ALIASROWNO >= 10;
经过测试,此方法成本最低,只嵌套一层,速度最快,即使查询的数据量再大,也几乎不受影响,速度依然
分页2:
SELECT
FROM (SELECT TT, ROWNUM AS ROWNO
FROM (Select t
from 表名 T(别名)
where flight_date between to_date('20060501', 'yyyymmdd') and
to_date('20060531', 'yyyymmdd')
ORDER BY FACT_UP_TIME, flight_no) TT(别名二)
WHERE ROWNUM <= 20) TABLE_ALIAS
where TABLE_ALIASrowno >= 10;
经过测试,此方法随着查询范围的扩大,速度也会越来越慢,
Mysql分页采用limt关键字 select from t_order limit 5,10; #返回第6-15行数据 select from t_order limit 5; #返回前5行 select from t_order limit 0,5; #返回前5行 Mssql 2000分页采用top关键字(20005以上版本也支持关键字rownum) Select top 10 from t_order where id not in (select id from t_order where id>5 ); //返回第6到15行数据 其中10表示取10记录 5表示从第5条记录开始取
Oracle分页
①采用rownum关键字(三层嵌套) SELECT FROM( SELECT A,ROWNUM num FROM (SELECT FROM t_order)A WHERE ROWNUM<=15) WHERE num>=5;--返回第5-15行数据 ②采用row_number解析函数进行分页(效率更高) SELECT xx FROM( SELECT t,row_number() over(ORDER BY o_id)AS num FROM t_order t )xx WHERE num BETWEEN 5 AND 15; --返回第5-15行数据 解析函数能用格式 函数() over(pertion by 字段 order by 字段); Pertion 按照某个字段分区 Order 按照勒个字段排序 用分析函数 一万条后翻最后一页会很慢,使用ROWNUM 一万条之后每翻一页都会慢
希望对你有所帮助
SELECT
FROM (SELECT a, ROWNUM rn
FROM (SELECT FROM zs_family) a
WHERE ROWNUM <= 105)
WHERE rn BETWEEN 1 AND 5;
-- 1 AND 5 采用动态SQL传参就行。下一页就是6到10,直到101到105
这种sql网上可以找到很多,给你举个例子:
select from (select e ,rownum rn from (select from emp) e) where rn>=5 and rn<=15;
其中rn用来指定行号。后面的5和15,可以从前台以入参形式传入,用来指定查询的范围。
希望对你有帮助。
v_begin number := (CURRENTPAGE - 1) PAGESIZE + 1;
v_end number := CURRENTPAGE PAGESIZE;
SELECT FROM (SELECT b,ROWNUM AS RN FROM (
) b WHERE ROWNUM<=v_end) WHERE RN>=v_begin
你只要将你的两个表关联查询的语句放在上面空行中就行了
SELECT FROM
(SELECT A, ROWNUM RN FROM (SELECT FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
其中最内层的查询SELECT FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。主要就是靠oracle的伪列rownum来控制。
1 select from ( select t, rownum RN from TABLE_NAME t ) where RN > 0 and RN <= 3
2 select from ( select t, rownum RN from TABLE_NAME t ) where RN between 1 and 3
以上就是关于oracle数据库分页查询,全部的内容,包括:oracle数据库分页查询,、oracle做分页查询怎么做、oracle和mysql分页查询问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)