`

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条数据.

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

分享到:
评论
16 楼 zhiblin 2009-04-03  
这个帖子 真的不错 收藏了
15 楼 yong_kang 2009-03-19  
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 
14 楼 yanchencheng 2008-11-23  
select * from dual;
13 楼 javaboy2006 2008-11-13  
返回有条件且经过排序的某段记录(三层结构)
select *
  from (select *
          from (select t.*, rownum num
                  from userinfo t
                 where siteid = 73
                 order by regtime desc)
         where num < 5)
 where num > 11;
12 楼 elstage 2008-11-12  
为什么我用between and 在翻页后就出错,取不到数据?
11 楼 ye_jinghua 2008-09-24  

超强的分页SQL
经过测试:
SELECT x.* from (SELECT z.*,rownum numbers from XZQH z where rownum<101) x where x.numbers>90  

在400000记录中进行分页查询只需0.4秒左右而其他的分页方法要6~13秒
10 楼 oboaix 2008-09-18  
必须使用内部order by 否则你的获取的数据 是不对的,这种使用分析函数:ROW_NUMBER() OVER(order by field)可以使用大数据量测试一把...
9 楼 tiandp007 2008-09-12  
<div class='quote_title'>mhqawjh 写道</div>
<div class='quote_div'>
<p>写了两个有关分页的SQL 语句,希望对大家有点帮助...记住,只能在Oracle下使用</p>
<p><strong><span style='color: #ff6600;'>1 获取总页数</span></strong></p>
<pre name='code' class='sql'>SELECT DECODE(mod(COUNT(*),100),0,COUNT(*)/100,TRUNC(COUNT(*)/100,0)+1)
AS  pages FROM XZQH </pre>
<p> 其中XZQH是表名,可以换成别的表格或者与别的表格相连或者加上查询条件....总之可以把XZQH换成FROM后的一切东西.</p>
<p>100是没页显示的记录数,换成你想要的!!!</p>
<p>生成结果是具有pages列的一个表格.可以用resultSet.getInt("pages")获得</p>
<p><span style='color: #ff6600;'><strong>2 获取特定的记录数据</strong></span></p>
<pre name='code' class='sql'>SELECT x.* from (SELECT z.*,rownum numbers from XZQH z where rownum&lt;101) x where x.numbers&gt;90</pre>
<p> 其中XZQH的含义与上述一样,可以换成你任何想要的条件和表连接</p>
<p>其中101和90是指定界限的数字,拿此例来说,是取出第90-----100条数据.</p>
<p>好了,点到为止..具体在实践中该怎么用,大家自己慢慢琢磨吧!!!</p>
</div>
<p> </p>
8 楼 percent 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>
7 楼 yuechen323 2008-08-21  
armorking 用分析函数的方法是正确的 他楼下那个是错误的
6 楼 yuechen323 2008-08-21  
不用分析函数你这个到1万条以后翻页慢的要死,用分析函数最后一页慢的要死,就这些。看你的系统需求了,如果用户只对前面的数据感兴趣,你就加hint first_row
5 楼 honda418 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楼的有区别么?
4 楼 topcloud 2008-07-18  
注意需要排序是使用:
ROW_NUMBER() OVER (ORDER BY field1,field2) AS rowNummber

不然不能总体排序,而是页内排序。
3 楼 feiji868 2008-06-24  
我认为用这个比较好
select * from ( select row_.*, rownum rownum_ from (SELECT * FROM table ORDER BY table.id DESC) row_ where rownum <= ?) where rownum_ > ?
2 楼 armorking 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 楼 laodizhuq 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  


否则你出来的结果不正确的

相关推荐

    Oracle Sql语句转换成Mysql Sql语句

    OracleSqlConvert4MysqlSqlTool.java这个源码工具,根据描述,应该是实现了自动读取Oracle SQL语句,分析其结构,并根据MySQL的语法规则进行转换,然后将转换后的SQL语句保存到指定的目标文件中。这个工具简化了手动...

    数据库分页SQL语句实现

    本文将详细介绍三种主流数据库(SQL Server、MySQL和Oracle)中的分页SQL语句实现方法。 #### SQL Server 的分页SQL语句实现 SQL Server 支持通过`TOP`关键字来实现分页查询。具体实现方式如下: 1. **查询第M页...

    oracle-jdbc分页实现(只需传入sql语句即可实现分页)

    这种方式较为复杂,一般不推荐在SQL语句中直接使用,更适合在Java代码中操作。 3. Oracle高级分页: Oracle 12c引入了窗口函数ROW_NUMBER(),可以更优雅地实现分页。例如: ```sql WITH data AS ( SELECT *, ROW_...

    oracle的 分页sql语句

    本文详细介绍了在 Oracle 数据库中如何实现分页查询,包括基本的 SQL 语句和存储过程两种方式,并给出了具体的 Java 实现示例。通过这些方法,你可以有效地管理和优化大量数据的展示,提高应用程序的性能和用户体验...

    几条常见的数据库分页SQL 语句

    几条常见的数据库分页SQL 语句,针对oracle,sqlserver,mysql三种常见数据库的分页显示。

    jdbc 分页 sql语句

    ### JDBC分页SQL语句详解 #### 一、引言 在数据库操作中,分页查询是非常常见且重要的一个功能。对于大型应用而言,一次性加载大量数据不仅会消耗过多资源,还可能导致用户体验下降。因此,合理地进行分页处理显得...

    数据库真分页SQL语句

    例如,在SQL Server中,获取第10页,每页显示10条记录的真分页SQL语句可能如下: ```sql SELECT * FROM ( SELECT *, ROW_NUMBER() OVER(ORDER BY SomeColumn) AS RowNum FROM YourTable ) AS TmpTable WHERE...

    oracle sql分页语句

    Oracle SQL分页语句是数据库查询中的一个重要概念,它允许我们从海量数据中按需获取特定范围的结果,比如第一页、第二页等。在Oracle数据库系统中,实现分页查询通常使用ROWNUM伪列或者结合RANK()、DENSE_RANK()、...

    Oracle中实现分页查询的SQL命令

    Oracle中实现分页查询的SQL命令 //curPage是当前页面,pageCount是每页显示行数 //rownum是伪列,相当于表中每一列的标识列(可以理解为行号),需要显式的提取出来并取一个别名

    SQL Server 存储过程及Oracle SQL语句分页

    而Oracle的分页SQL语句更为简洁,适合在不支持存储过程或者简单场景下使用。但需要注意的是,Oracle的`ROWNUM`方式在处理有序数据时可能会有性能问题,因为`WHERE ROWNUM`条件可能无法充分利用索引。 在实际应用中...

    分页SQL语句

    SQL Server 、MySQL 、Oracle数据库分页SQL语句

    使用简单的SQL语句实现的Oracle数据库分页技术

    在Oracle数据库中实现分页查询是一项常见的需求,尤其是在处理大量数据时。本文将介绍一种利用简单SQL语句来实现Oracle数据库分页的方法,这种方法不依赖于复杂的PL/SQL过程或函数,而是通过SQL查询的巧妙设计来达到...

    oracle一条sql语句分页

    这种分页方式非常实用,适用于大多数Oracle分页场景。 #### 3. 高级技巧与注意事项 - **子查询优化**:由于上述方法涉及多层嵌套查询,对于大型表来说可能会导致性能问题。一种改进的方法是使用`FETCH FIRST n ...

    Oracle SQL语句分页问题

    ### Oracle SQL语句分页问题详解 #### 一、引言 在数据库查询操作中,分页是一项常用且重要的功能,特别是在数据量较大的情况下。它能够有效地提高用户体验,并减轻服务器负担。本文将针对Oracle数据库中的SQL分页...

    用SQL语句实现分页(Oracle版Sql Server版)

    ### 使用SQL语句实现分页(Oracle与SQL Server版本) #### 一、Oracle数据库分页实现 在Oracle数据库中,实现分页查询主要依赖于`ROWNUM`这一特殊功能。`ROWNUM`是一个伪列,它为结果集中的每一行分配一个唯一的...

    Sql语法转换为Oracle语法

    描述中提到的"SqlConvertToOracle.pas"是一个关键文件,它可能是一个用Delphi编写的源代码文件,包含了实现SQL语句转换的核心算法。Delphi是一种流行的面向对象的编程语言,常用于开发桌面应用程序,尤其是数据库...

    用ORACLE的SQL语句实现多栏分页输出

    用ORACLE的SQL语句实现多栏分页输出.RTF

    Oracle的sql语句练习题及参考答案

    9. **分页**:`LIMIT`和`OFFSET`在某些数据库系统中用于实现数据分页,但Oracle使用`ROWNUM`或`FETCH NEXT`结合`WITH TIES`来实现类似功能。 10. **动态SQL**:允许在运行时构建和执行SQL语句,增强了SQL的灵活性,...

    Oracle的分页查询语句 Oracle分页的存储过程

    本文将详细探讨Oracle的分页查询语句及其存储过程。 首先,Oracle的分页查询语句通常遵循一个标准格式,如下所示: ```sql SELECT * FROM ( SELECT A.*, ROWNUM RN FROM ( SELECT * FROM TABLE_NAME ) A WHERE ...

    数据库分页SQL语句.pdf

    在 SQL Server 中,我们可以使用 TOP 关键字来实现分页技术。TOP 关键字可以指定要检索的记录数。例如,从数据库表中检索从第 M 条记录开始的 N 条记录,可以使用以下语句: ```sql SELECT * FROM ( SELECT TOP N...

Global site tag (gtag.js) - Google Analytics