论坛首页 综合技术论坛

Oracle中实现分页的SQL语句

浏览 22805 次
精华帖 (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条数据.

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

   发表时间: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_ > ?
2 请登录后投票
   发表时间: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-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 请登录后投票
   发表时间: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条数据.

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

 

0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics