论坛首页 综合技术版 Database

Oracle中实现分页的SQL语句

浏览 2522 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
时间:2008-04-25 关键字: 分页 oracle sql

写了两个有关分页的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条数据.

好了,点到为止..具体在实践中该怎么用,大家自己慢慢琢磨吧!!!

   
时间: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  


否则你出来的结果不正确的
   
0 请登录后投票
时间: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
   
1 请登录后投票
时间:2008-06-24
我认为用这个比较好
select * from ( select row_.*, rownum rownum_ from (SELECT * FROM table ORDER BY table.id DESC) row_ where rownum <= ?) where rownum_ > ?
   
1 请登录后投票
时间:2008-07-18
注意需要排序是使用:
ROW_NUMBER() OVER (ORDER BY field1,field2) AS rowNummber

不然不能总体排序,而是页内排序。
   
0 请登录后投票
时间: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楼的有区别么?
   
0 请登录后投票
时间:2008-08-21
不用分析函数你这个到1万条以后翻页慢的要死,用分析函数最后一页慢的要死,就这些。看你的系统需求了,如果用户只对前面的数据感兴趣,你就加hint first_row
   
0 请登录后投票
时间:2008-08-21
armorking 用分析函数的方法是正确的 他楼下那个是错误的
   
0 请登录后投票
时间:2008-08-23
分页不加 order by 肯定是错误的!!
你不想第一页出现的数据,在第二页还出现吧?
楼主写的两个 SQL 都有问题。
   
0 请登录后投票
时间: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>
   
0 请登录后投票
论坛首页 综合技术版 Database

跳转论坛:
JavaEye推荐