`

oracle rownum实现分页

阅读更多

//rownum是一个伪列,是Oracle系统自动为查询返回结果的每行分配的编号,第一行为1,第二行为2,以此类推。。。。  
//一个oracle分页,至少要包含三层(除非不用order by,暂时可以用2层实现),模板为  
select temp2.* from(  
       select rownum num,temp1.* from(  
              SQL query  
       ) temp1 where rownum<=n1  
)temp2 where temp2.num>n2  
-  
//例如:值返回查询结果第11条到20条着10条的信息的SQL如下:  
select temp2.*  
from(  
    select rownum num,temp1.*  
      from(  
        select tt.title_id,tt.name  
              from t_title tt  
        where tt.name like '%美%' 
        order by tt.sort_seqs asc,tt.title_Id desc) temp1  
    where rownum<=20  
)temp2   
where temp2.num>10  
//分析:  
//1.首先是一个正常的查询语句(包含order by)  
select tt.title_id,tt.name  
from t_title tt  
where tt.name like '%美%' 
order by tt.sort_seqs asc,tt.title_Id desc  
//这个和正常的SQL语句没有任何的区别  
--  
//2.添加rownum字段,显示列数(注意:rownum一定是先<n1,嵌套后再>n2)  
select rownum num,temp1.*  
from(  
    select tt.title_id,tt.name  
    from t_title tt  
    where tt.name like '%美%' 
    order by tt.sort_seqs asc,tt.title_Id desc) temp1  
where rownum<=20  
//我们添加了rownum 显示字段,这时候就会会每行添加一个行数的编号;并且只返回20条之前的数据(包含20条)  
--  
//3.截取第10条到20条的数据,SQL就是上面最完整的那个啦。  
//使用精解:  
//1.rownum的使用:  
//如下两条语句:  
select rownum,id,name from student where rownum>2;  
select rownum,id,name from student where rownum<=10;  
--  
//第一条语句的执行结果为空,第二条语句的执行结果为前10条记录;  
//为什么会这样呢,我们知道rownum是伪列,是oracle为查询结果自动添加的伪列,第一行是1,  
//如果where rownum>2,这时候查找第一条发现它的rownum=1,不满足条件,于是抛弃掉,  
//把第二条语句的rownum赋值为1,再判断第二条记录是否满足条件,同样不满足。。。。  
//于是发生了死循环一样的判断,最终返回空;  
//有人这时候就奇怪啦,为什么第一条记录rownum=1不满足条件时候,第二条记录rownum=2,却要重新设值为1呢?  
//非常简单,你直接在where后添加了条件rownum>2,它是个条件啦,  
//第一条记录不满足条件,叫抛弃掉啦,这时候结果集是空的,当然会一直rownum=1的赋值;  
//解决办法:先查询,并为每条记录分配rownum,然后嵌套查询  
select t.* from (select rownum num,id,name from student) t where t.num>2  
//第二条语句可以正常的执行,根据上面的解释,这个可以理解了吧!  
--  
//2.rownum与order by同时存在的问题  
//当 where 后面有rownum的判断,并且存在order by时候,rownum的优先级高!  
//oracle会先执行rownum的判断,然后从结果中order by,很明显是错误的结果啦!  
//就好像学校要取成绩最好的前10名同学,结果这种方法一执行,成了取出10名同学,然后按照成绩的高低排序!  
//这点与SQL Server的TOP完全不同,TOP遇上order by,是先执行order by,在分页的;  
//解决办法就是先执行order by,然后嵌套执行rownum  
//说白啦就是用()改变函数的优先级!

分享到:
评论

相关推荐

    ROWNUM的使用技巧

    另外一种实现方式是使用 ROWNUM 和 MINUS 操作符结合来实现分页查询。例如: ```sql select * from css_bl_view a where capture_phone_num = '(1) 925-4604800' and rownum minus select * from css_bl_view a...

    oracle rownum 学习

    Oracle ROWNUM学习 Oracle ROWNUM是Oracle...ROWNUM是一个非常有用的伪字段,可以用于限制查询返回的总行数、实现分页、限制查询返回的第一行记录等。但是,需要注意ROWNUM的限制和使用子查询来解决一些查询问题。

    oracle rownum 的使用 和sqlserver有区别的!

    - 在 Oracle 中,通常使用以下方式实现分页查询: ```sql SELECT * FROM (SELECT * FROM tab_name ORDER BY column_name) WHERE ROWNUM ; ``` - SQL Server 中则通常采用 TOP 子句或 OFFSET/FETCH NEXT 子句来...

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

    Oracle JDBC分页实现是数据库操作中的一个重要环节,尤其是在处理大量数据时,为了提高用户体验和系统性能,分页查询显得尤为重要。Oracle数据库提供了多种方法来实现分页查询,其中包括使用ROWNUM伪列、游标...

    使用jdbc_oracle实现的分页功能

    本示例着重讲解如何利用JDBC和Oracle数据库实现分页功能,同时涵盖一个表的基本操作:增加、删除和修改。 首先,我们需要了解JDBC。JDBC是Java API,它提供了一套标准接口,使得Java程序可以与各种类型的数据库进行...

    对于 Oracle 的 rownum 问题

    对于 Oracle 的 rownum 问题,很多资料都说不支持&gt;,&gt;=,=,between...and,只能用以上符号(&lt;、、!=),并非说用&gt;,&gt;=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来...

    Oracle 存储过程分页

    总结,Oracle 存储过程中的分页实现有很多种方式,包括ROWNUM、ROW_NUMBER()、CTE、FETCH FIRST子句,以及JOIN和游标等。选择哪种方法取决于具体的需求,如数据库版本、性能需求、查询复杂性等因素。正确使用分页...

    Oracle的SQL分页实践

    使用JDBC时,可以结合LIMIT和OFFSET子句(Oracle不支持LIMIT,但可以通过ROWNUM模拟)来实现分页,而在Hibernate中,可以使用Criteria API或HQL的`setFirstResult`和`setMaxResults`方法来实现相同的功能。...

    Oracle&JSP分页和Oracle分页

    不过,ROWNUM有个限制,它不能与WHERE子句一起使用来实现分页,因为Oracle在执行WHERE之前就已经计算了ROWNUM。为了解决这个问题,可以使用子查询或临时表。 另一种更高效的方法是使用Oracle的`ROW_NUMBER()`函数,...

    Oracle Rownum的使用与JSP分页显示的实现.pdf

    Oracle数据库中的Rownum是一个非常重要的特性,尤其在处理大量数据和实现分页显示时显得极其关键。Rownum是一个伪列,它并不是数据库表中实际存在的列,而是Oracle在执行查询时动态生成的,用来表示查询结果集中每一...

    Oracle-C#分页控件

    Oracle支持“ROWNUM”伪列来实现分页,例如: ```sql SELECT * FROM ( SELECT ROWNUM rnum, t.* FROM YourTable t WHERE YOUR_CONDITION ) WHERE rnum BETWEEN startRow AND endRow; ``` 这里,`startRow`和`...

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

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

    ORACLE 中ROWNUM用法总结

    在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,用于限制查询结果的行数,尤其是在处理大数据量或进行分页查询时。然而,`ROWNUM`的使用并不直观,尤其是当涉及到比较运算符(如`&gt;`, `&gt;=`, `=`等)时,容易引发...

    Oracle分页实现

    ### Oracle分页实现方法 #### 方法一:使用ROWNUM ROWNUM是Oracle中的一个伪列,它可以为结果集中的每一行分配一个唯一的行号。利用ROWNUM进行分页的基本思想是在内层查询中筛选出所有需要的数据,然后在外层查询...

    韩顺平Oracle版的分页查询

    本教程以"韩顺平Oracle版的分页查询"为主题,结合MyEclipse进行Web开发,旨在教授如何在Oracle数据库中实现高效且实用的分页查询。 首先,我们需要理解Oracle中实现分页查询的基本概念。在SQL语句中,通常使用`...

    java web与Oracle数据的分页功能

    本项目提供的源代码正是针对这一需求,提供了在Java Web环境中利用Oracle数据库实现分页功能的解决方案。 首先,我们来理解一下分页的基本概念。分页是将数据库查询结果分成若干页展示,用户可以逐页浏览,而不是一...

    oracle分页程序的实现

    在Oracle数据库中,常见的分页查询方法有ROWNUM和ROW_NUMBER()函数,以及使用子查询和连接操作来实现分页。 1. ROWNUM方法: ROWNUM是Oracle中的内置伪列,它会为每一行数据生成一个唯一的数字,从1开始递增。但...

    如何在Oracle中实现搜索分页查询

    综上所述,实现Oracle中的搜索分页查询需要理解ROWNUM的工作原理,合理地构造子查询和绑定变量,以及考虑是否利用存储过程进行优化。通过这些技术,可以有效地在大量数据中实现分页查询,提供高效且用户友好的数据...

    oracle实现分页

    总结来说,Oracle数据库通过`ROWNUM`或`ROW_NUMBER()`函数可以实现分页查询。在Java Web开发中,可以结合Servlet和JSP进行数据处理和展示,提供分页功能。同时,注意前后端的交互设计,确保良好的用户体验。

    Oracle 3种分页SQL方法比较

    本文将详细探讨三种常用的Oracle分页SQL方法:ROWNUM、ROWNUM结合子查询以及新引入的Oracle 12c的FETCH NEXT WITH OFFSET语法。这三种方法各有优缺点,适用于不同的场景。 1. ROWNUM方法: ROWNUM是Oracle中最基础...

Global site tag (gtag.js) - Google Analytics