锁定老帖子 主题:Oracle中实现分页的SQL语句
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-25
写了两个有关分页的SQL 语句,希望对大家有点帮助...记住,只能在Oracle下使用 1 获取总页数 SELECT DECODE(mod(COUNT(*),100),0,COUNT(*)/100,TRUNC(COUNT(*)/100,0)+1) AS pages FROM XZQH 其中XZQH是表名,可以换成别的表格或者与别的表格相连或者加上查询条件....总之可以把XZQH换成FROM后的一切东西. 100是没页显示的记录数,换成你想要的!!! 生成结果是具有pages列的一个表格.可以用resultSet.getInt("pages")获得 2 获取特定的记录数据 SELECT x.* from (SELECT z.*,rownum numbers from XZQH z where rownum<101) x where x.numbers>90 其中XZQH的含义与上述一样,可以换成你任何想要的条件和表连接 其中101和90是指定界限的数字,拿此例来说,是取出第90-----100条数据. 好了,点到为止..具体在实践中该怎么用,大家自己慢慢琢磨吧!!! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-06-14
应该是:
SELECT x.* from ( SELECT z.*,rownum numbers from( select * from XZQH where XXX order by XXX) z where rownum<101) x where x.numbers>90 否则你出来的结果不正确的 |
|
返回顶楼 | |
发表时间:2008-06-16
laodizhuq 写道 应该是:
SELECT x.* from ( SELECT z.*,rownum numbers from( select * from XZQH where XXX order by XXX) z where rownum<101) x where x.numbers>90 否则你出来的结果不正确的 也可以直接用分析函数 SELECT X.* FROM ( SELECT ROW_NUMBER() OVER(order by XXX) AS numbers , XZQH.* FROM XZQH WHERE XXX ) X WHERE X.numbers < 101 AND X.numbers > 90 |
|
返回顶楼 | |
发表时间:2008-06-24
我认为用这个比较好
select * from ( select row_.*, rownum rownum_ from (SELECT * FROM table ORDER BY table.id DESC) row_ where rownum <= ?) where rownum_ > ? |
|
返回顶楼 | |
发表时间:2008-07-18
注意需要排序是使用:
ROW_NUMBER() OVER (ORDER BY field1,field2) AS rowNummber 不然不能总体排序,而是页内排序。 |
|
返回顶楼 | |
发表时间:2008-08-19
feiji868 写道 我认为用这个比较好
select * from ( select row_.*, rownum rownum_ from (SELECT * FROM table ORDER BY table.id DESC) row_ where rownum <= ?) where rownum_ > ? 你仔细看看,跟2楼的有区别么? |
|
返回顶楼 | |
发表时间:2008-08-21
不用分析函数你这个到1万条以后翻页慢的要死,用分析函数最后一页慢的要死,就这些。看你的系统需求了,如果用户只对前面的数据感兴趣,你就加hint first_row
|
|
返回顶楼 | |
发表时间:2008-08-21
armorking 用分析函数的方法是正确的 他楼下那个是错误的
|
|
返回顶楼 | |
发表时间:2008-08-24
不加 order by 也不会出现:"第一页出现的数据,在第二页还出现"因为已经基于
rownum进行分页了 楼主写的两个 SQL 没有问题。 SQL> select temp.* 2 from (select trunc(rownum/100,0)+1 group_n, 3 mod(rownum,100) index_n, 4 table_name.*--table_name is a table 5 from table_name 6 where rownum<=(10-1)*100+15 --若查询所有的,去除where 7 ) temp 8 where group_n=10 and index_n between 5 and 10 9 order by group_n asc,index_n asc 10 --results: 11 --检索记录从1组开始到10组的第15个元素终止 12 --then select index of 10 group's recorders between 5 and 10 13 / GROUP_N INDEX_N column ---------- ---------- ----------------- 10 5 1.00000000036492E 10 6 1.00000000036493E 10 7 1.00000000036507E 10 8 1.00000000036581E 10 9 1.00000000036657E 10 10 1.00000000036667E 6 rows selected SQL> |
|
返回顶楼 | |
发表时间:2008-09-12
mhqawjh 写道
写了两个有关分页的SQL 语句,希望对大家有点帮助...记住,只能在Oracle下使用 1 获取总页数 SELECT DECODE(mod(COUNT(*),100),0,COUNT(*)/100,TRUNC(COUNT(*)/100,0)+1) AS pages FROM XZQH 其中XZQH是表名,可以换成别的表格或者与别的表格相连或者加上查询条件....总之可以把XZQH换成FROM后的一切东西. 100是没页显示的记录数,换成你想要的!!! 生成结果是具有pages列的一个表格.可以用resultSet.getInt("pages")获得 2 获取特定的记录数据 SELECT x.* from (SELECT z.*,rownum numbers from XZQH z where rownum<101) x where x.numbers>90 其中XZQH的含义与上述一样,可以换成你任何想要的条件和表连接 其中101和90是指定界限的数字,拿此例来说,是取出第90-----100条数据. 好了,点到为止..具体在实践中该怎么用,大家自己慢慢琢磨吧!!!
|
|
返回顶楼 | |