`
crabdave
  • 浏览: 1294863 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle rownum使用经验总结

阅读更多

Oracle rownum使用经验总结

 在使用oracle的rownum实现分页显示的时候,对rownum做了进一步的分析和研究。现归纳如下,希望能给大家带来收获。
      对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。
举例说明:
例如表:student(学生)表,表结构为:
ID       char(6)      --学号
name    VARCHAR2(10)   --姓名
create table student (ID char(6), name VARCHAR2(100));
insert into sale values('200001',‘张一’);
insert into sale values('200002',‘王二’);
insert into sale values('200003',‘李三’);
insert into sale values('200004',‘赵四’);
commit;
(1) rownum 对于等于某值的查询条件
如 果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生的信息,使用rownum=2结果查不到数据。因 为rownum都是从1开始,但是1以上的自然数在rownum做等于判断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数)。
SQL> select rownum,id,name from student where rownum=1;(可以用在限制返回记录条数的地方,保证不出错,如:隐式游标)
SQL> select rownum,id,name from student where rownum=1;
    ROWNUM ID     NAME
---------- ------ ---------------------------------------------------
         1 200001 张一
SQL> select rownum,id,name from student where rownum =2;
    ROWNUM ID     NAME
---------- ------ ---------------------------------------------------
(2)rownum对于大于某值的查询条件
   如果想找到从第二行记录以后的记录,当使用rownum>2是查不出记录的,原因是由于rownum是一个总是从1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立,所以查不到记录
SQL> select rownum,id,name from student where rownum >2;
ROWNUM ID     NAME
---------- ------ ---------------------------------------------------
那如何才能找到第二行以后的记录呀。可以使用以下的子查询方法来解决。注意子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因为rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。
SQL>select * from(select rownum no ,id,name from student) where no>2;
        NO ID     NAME
---------- ------ ---------------------------------------------------
         3 200003 李三
         4 200004 赵四
SQL> select * from(select rownum,id,name from student)where rownum>2;
    ROWNUM ID     NAME
---------- ------ ---------------------------------------------------
(3)rownum对于小于某值的查询条件
如果想找到第三条记录以前的记录,当使用rownum<3是能得到两条记录的。显然rownum对于rownum<n((n>1的自然数)的条件认为是成立的,所以可以找到记录。
SQL> select rownum,id,name from student where rownum <3;
    ROWNUM ID     NAME
---------- ------ ---------------------------------------------------
1 200001 张一
        2 200002 王二
综 上几种情况,可能有时候需要查询rownum在某区间的数据,那怎么办呀从上可以看出rownum对小于某值的查询条件是人为true的,rownum对 于大于某值的查询条件直接认为是false的,但是可以间接的让它转为认为是true的。那就必须使用子查询。例如要查询rownum在第二行到第三行之 间的数据,包括第二行和第三行数据,那么我们只能写以下语句,先让它返回小于等于三的记录行,然后在主查询中判断新的rownum的别名列大于等于二的记 录行。但是这样的操作会在大数据集中影响速度。
SQL> select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;
        NO ID     NAME
---------- ------ ---------------------------------------------------
         2 200002 王二
         3 200003 李三
(4)rownum和排序
Oracle中的rownum的是在取数据的时候产生的序号,所以想对指定排序的数据去指定的rowmun行数据就必须注意了。
SQL> select rownum ,id,name from student order by name;
    ROWNUM ID     NAME
---------- ------ ---------------------------------------------------
         3 200003 李三
         2 200002 王二
         1 200001 张一
         4 200004 赵四
可以看出,rownum并不是按照name列来生成的序号。系统是按照记录插入时的顺序给记录排的号,rowid也是顺序分配的。为了解决这个问题,必须使用子查询
SQL> select rownum ,id,name from (select * from student order by name);
    ROWNUM ID     NAME
---------- ------ ---------------------------------------------------
         1 200003 李三
         2 200002 王二
         3 200001 张一
         4 200004 赵四
这样就成了按name排序,并且用rownum标出正确序号(有小到大)

分享到:
评论

相关推荐

    Oracle经验集锦

    ### Oracle经验集锦 在日常使用Oracle数据库的...以上是在Oracle数据库管理与使用过程中的一些实用技巧与经验总结,希望能对大家有所帮助。在日常工作中,还需要根据具体情况进行灵活运用,不断提升自己的技能水平。

    DBA对Oracle SQL编写规范的总结

    本文档由一位经验丰富的数据库管理员(DBA)撰写,旨在总结一系列最佳实践,帮助开发人员在编写SQL语句时更加高效、准确。 #### 二、SQL语句基本编码规范 ##### 2.1 英文字母编写 - **规范要求**:SQL语句中除存储...

    db2和oracle的区别.docx

    1. 获取前N条记录:Oracle使用`rownum`限制,而DB2使用`fetch first`子句。 2. 获取系统日期:Oracle的`sysdate`对应于DB2的`current timestamp`。 3. 空值处理:Oracle的`nvl`在DB2中用`value`函数实现。 4. 类型...

    分页代码Oracle

    总结来说,Oracle数据库中的分页代码实现主要涉及到SQL查询的编写,以及在Java后端如何处理这些查询。理解分页的基本原理和Oracle提供的函数,结合实际编程环境,可以有效地实现高效、灵活的分页功能。对于初学者而...

    Oracle数据库经典学习教程

    通过上述知识点的总结,可以发现《Oracle数据库经典学习教程》全面地覆盖了Oracle数据库的基础知识、SQL语言、数据库对象管理、程序设计等方面的内容。无论是初学者还是有一定经验的技术人员都能从中受益匪浅。希望...

    jsp+jdbc_oracle增删改查过滤分页排序

    总结起来,这个教程涵盖了Web开发中重要的数据操作部分,通过学习和实践,开发者不仅可以掌握JSP与Oracle数据库的交互,还能了解到如何提升用户体验,如数据过滤、排序和分页。这对于初入IT行业的开发者来说,无疑是...

    oracle编程学习材料

    这篇总结将深入探讨Oracle SQL的学习要点。 一、SQL基础 SQL是用于创建、查询、更新和管理数据库的语言。在Oracle中,SQL的基本概念包括: 1. 数据库对象:如表、视图、索引、存储过程、函数等。 2. 数据类型:...

    ORACLE SQL 优化 存储过程 PROCEDURE

    ORACLE SQL 优化存储过程 PROCEDURE 是一篇结合实际开发经验和理论知识的文章,旨在帮助开发者提高 SQL 开发效率和优化存储过程。文章涵盖了广泛的知识点,从基本的 SQL 语句到高级的优化技术。 基本 SQL 知识点 ...

    oracle基础资料

    “第3章_限制数据和对数据排序.pdf”可能涉及查询优化,如LIMIT子句的使用(在Oracle中通常使用ROWNUM伪列实现),以及更复杂的排序规则和多列排序。 “第4章_单行函数.pdf”会介绍Oracle中的各种函数,如字符串...

    commonsql.rar_oracle

    本指南针对初学者和有一定经验的DBA,旨在通过“commonsql.doc”文档中的经典案例,帮助读者快速掌握Oracle的基本操作和常用SQL语句。 一、Oracle数据库简介 Oracle数据库是由Oracle公司开发的关系型数据库管理...

    oracle8傻瓜手册

    通过以上总结,可以看出该手册涵盖了Oracle8数据库从安装、配置、优化到日常管理和应用开发的各个方面,是一份非常全面和实用的指南。对于初学者和有一定经验的DBA来说都是非常有价值的参考资料。

    Oracle实施 采购业务需求分析匹配.docx

    这些报告对于总结采购活动的经验教训、改进采购策略具有重要意义。同时,也可以帮助管理层全面了解采购状况,做出更明智的决策。 ### 附录资料 这部分提供了一些关于Oracle数据库的基础知识和技术细节,虽然不是...

    oracler技术总结

    在Oracle中,我们可以使用`SELECT * FROM table_name WHERE ROWNUM 来实现。这种方法基于行号,限制返回的行数,确保只获取前10条数据。 总的来说,"oracler技术总结"涵盖的内容非常实用,无论是对数据库初学者还是...

    据说是阿里巴巴公司DBA笔试题

    12. 取第 21—30 条记录显示:使用 ROWNUM 伪列和子查询来实现 数据库基本概念 1. pctused 和 pctfree 的含义和作用:pctused 表示表或索引的使用百分比,pctfree 表示表或索引的空闲百分比 2. table / segment / ...

    jsp简单分页,完整代码+orcle数据库源码,可直接运行

    在Oracle中,可以使用`ROWNUM`伪列进行分页查询。例如,要获取第n页的数据,我们可以构建如下的SQL语句: ```sql SELECT * FROM (SELECT T.*, ROWNUM RN FROM (SELECT * FROM YOUR_TABLE) T WHERE ROWNUM *(:...

    java面试常见难点概念总结

    - **分页处理**:MySQL可以使用`LIMIT`语句轻松实现分页,而Oracle的分页处理相对复杂,通常需要结合`ROWNUM`和子查询来实现。 - **数据类型**:例如,Oracle有`VARCHAR2`类型,而MySQL没有;MySQL有`INT`类型,...

    DBA面试题

    包括UNION ALL与UNION的区别、使用CREATE DATABASE语句创建数据库的好处、密码安全规则及其在Oracle中的实现方法、Oracle Wait Interface的基本概念、如何返回查询的前N个结果以及Oracle DataGuard在标准版中的使用...

    大数据量翻页查询的一点经验

    它们利用`rownum`来实现分页,减少了不必要的全表扫描。SQL语句1用于获取第一页,而SQL语句2通过`MINUS`操作获取第N页。注意,添加额外的`num`列是为了保持减法操作后结果的有序性,并确保相同记录被排除。而添加...

    SSH分页技术详解与实例

    7. **实际项目中的适应性**:在实际项目中,可能需要根据数据库类型和具体需求调整分页SQL的写法,例如Oracle支持ROWNUM,而MySQL则可以使用LIMIT和OFFSET。 **优化技巧**: 1. **缓存**:对于不经常变动的数据,...

Global site tag (gtag.js) - Google Analytics