`

oracle rownum 学习

阅读更多
----oracle排序写法
SELECT * FROM ( 
SELECT list.*, rownum as RNUM FROM ( 
SELECT *   FROM CIP_Test_User                                                   
ORDER BY ID desc ) 
list WHERE ROWNUM <   11 ) WHERE RNUM >=1 

 

 

1、为什么不直接用  SELECT a.*,rownum  FROM CIP_Test_User a   ORDER BY ID desc进行排序?
   因为rownum计算比ORDER BY ID desc 更有优先级,rownum的值不会按照排序后的记录顺序重新计算,所

以如果这样做要取排序后的记录肯定是有错误的。


2、为什么要先取 ROWNUM <  5,再循环一次取ROWNUM >1?用下面的语句行不行?
 SELECT list.*, rownum as RNUM FROM (
  SELECT a.*,rownum  FROM CIP_Test_User a   ORDER BY ID desc)
  list WHERE ROWNUM <  5 and ROWNUM >1

验证结果:取出的记录为0行。
因为1:当用rownum做为条件时,只能用小于、小于等于、等于(只能等于1),而用大于、大于等于是没有结果的。
       因为oracle计算时,当出现一个 rownum 不满足条件的时候则 查询结束   this is stop key!

 

 

 

rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,

这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。

(1) rownum 对于等于某值的查询条件

  如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学

生的信息,使用rownum=2结果查不到数据。因为rownum都是从1开始,但是1以上的自然数在rownum做等于判

断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数)。

(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和排序
“select * from tabname where rownum<20 order by name" 但却发现oracle却不能按自己的意愿来执行,而是先随便取20条记录,然后再 order by,后经咨询oracle,说rownum确实就这样,想用的话,只能用子查询 来实现先排序,后rownum,方法如下:

  "select * from (select * from tabname order by name) where rownum<20",但这样一来,效率会较低很多。

  但是,在order by 的字段上加主键或索引即可让oracle先按 该字段排序,然后再rownum;方法不变:

  “select * from tabname where rownum<20 order by name"

参考网址:http://www.examda.com/oracle/zhonghe/20091209/100421867.html

分享到:
评论
1 楼 zhangyou1010 2010-10-12  
    
帮我扫盲了,谢谢。

相关推荐

    Oracle学习笔记(rownum和rowid)

    Oracle学习笔记(rownum和rowid),有具体的代码案例讲解rownum和rowid

    mysql类似oracle rownum写法实例详解

    在 Oracle 中,`ROWNUM` 是一个非常有用的特性,它可以在查询时为每一行生成一个唯一的序列号,这对于限制返回结果的数量或者进行分页查询非常有用。然而,MySQL 并不直接支持 `ROWNUM` 这一概念。但在实际应用中,...

    Oracle数据库学习指南

    40. 如何正确利用Rownum来限制查询所返回的行数 41. 什么是ROWID,为什么需要它 42. 手工安装数据库时需要安装那些系统包 43. 手工创建数据库的全部脚本及说明 44. 提高Oracle数据库应用系统安全的举例与分析 ...

    Oracle数据库学习日记-实用性最强的Oracle学习总结.docx

    ### Oracle数据库学习知识点详解 #### 一、基本使用 ##### 1.1 常用命令 **1.1.1 Connect/Disconnect数据库连接命令** - **用途:** 连接或断开与Oracle数据库的连接。 - **语法示例:** - `sqlplus username/...

    Oracle数据库经典学习教程

    ### Oracle数据库经典学习教程知识点概览 #### 一、走进Oracle ##### 1. Oracle简介 - **背景介绍**:Oracle是由甲骨文公司开发的一款关系型数据库管理系统,以其强大的功能和广泛的应用场景而闻名。它不仅适用于中...

    Oracle数据库学习日记

    ### Oracle数据库学习知识点详解 #### 一、基本使用 ##### 1.1 常用命令 **1.1.1 Connect/Disconnect 数据库连接命令** - **Connect**: 使用 `connect` 命令可以连接到Oracle数据库。语法通常为 `connect ...

    oracle编程学习材料

    Oracle编程学习材料是一份专为初学者设计的资源集合,主要涵盖了SQL语言的基础与进阶内容。Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统,而SQL(结构化查询语言)则是管理和操作Oracle数据库的核心...

    oracle学习及练习语句

    本文将深入探讨在"Oracle学习及练习语句"主题中涉及的关键知识点,包括DDL语句、联系表设计、ROWNUM的使用以及如何查询和删除重复记录。 1. DDL(Data Definition Language)语句:在Oracle中,DDL用于创建、修改或...

    Oracle学习

    在Oracle学习中,了解和掌握数据库的基础知识,如用户管理、SQL查询语言以及数据处理操作是至关重要的。 首先,Oracle数据库中有不同级别的用户,包括超级管理员、普通管理员和普通用户。超级管理员通常是sys,其...

    数据库oracle自学通

    SQL(Structured Query Language)是用于管理和操作数据库的标准语言,学习Oracle数据库和SQL语句是IT行业的基本技能之一。本“数据库Oracle自学通”文档旨在帮助初学者快速掌握Oracle的基础功能和SQL语法。 一、...

    通过ROWNUM取得第二条数据

    目前,很多人想通过ROWNUM取得第N条数据,可以没有办法实现。现在本人有这么一条语句,供大家学习学习。通过ROWNUM取得第二条数据

    MLDN魔乐科技_Oracle课堂19_修改约束、ROWNUM

    在Oracle数据库管理中,理解和掌握如何修改约束以及使用ROWNUM是非常重要的技能。本篇将深入探讨这两个核心概念,并通过MLDN魔乐科技的Oracle课堂19视频课程进行详细讲解。 首先,我们来讨论"修改约束"。在Oracle中...

    oracle11gR2学习笔记

    在Oracle中实现分页查询,可以结合ROWNUM伪列,如上述示例所示,先创建一个带有ROWNUM的新表,然后根据ROWNUM进行筛选,实现数据分页。 这些只是Oracle 11g R2学习笔记中的部分内容,实际学习和使用中还会涉及更多...

    MLDN魔乐科技JAVA培训_Oracle课堂19_修改约束、ROWNUM.rar

    【标签】"MLDN魔乐科技JAVA培训_Oracle课堂19_修改约束、ROWNUM.rar"标签再次确认了课程的主题,强调了学习者将深入理解Java开发背景下的Oracle数据库管理和查询优化技巧。 【压缩包子文件的文件名称】"MLDN魔乐...

    指导学习oracle

    ### Oracle 数据库学习指南 #### 一、通过索引提高查询效率 在Oracle数据库中,索引是一种重要的数据结构,用于提高数据检索的性能。它类似于书籍中的索引,可以帮助快速定位到特定的数据行。 ##### 创建表与批量...

    达内-ORACLE学习笔记

    ### Oracle数据库中常用的数据类型 在Oracle数据库中,数据类型的选择对于存储效率和查询性能至关...通过以上内容的学习,可以对Oracle数据库有一个全面而深入的理解,为高效地管理和利用数据库资源打下坚实的基础。

    Oracle高级sql学习与练习

    Oracle高级SQL学习与练习涵盖了数据库编程中的一系列高级主题,旨在帮助数据库开发者和管理员提高解决复杂问题的能力。在Oracle数据库系统中,高级SQL技能是进行高效数据管理、查询优化和复杂数据处理的基础。 1. ...

    ORACLE数据库各阶段学习资料PDF

    学习者还应了解排序(ORDER BY)、分页(LIMIT或ROWNUM)等查询技巧。 三、Oracle函数 Oracle提供了丰富的内置函数,包括字符串函数(如SUBSTR、CONCAT)、日期时间函数(如SYSDATE、ADD_MONTHS)、数学函数(如...

Global site tag (gtag.js) - Google Analytics