`

Rownum用法总结

阅读更多
 
软件环境: 
1、Windows NT4.0+ORACLE 8.0.4
2、ORACLE安装路径为:C:\ORANT

含义解释: 
1、rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,
  依此类推,这个伪字段可以用于限制查询返回的总行数。
2、rownum不能以任何基表的名称作为前缀。 
使用方法: 
现有一个商品销售表sale,表结构为:
month    char(6)      --月份
sell    number(10,2)   --月销售金额

create table sale (month char(6),sell number);
insert into sale values('200001',1000);
insert into sale values('200002',1100);
insert into sale values('200003',1200);
insert into sale values('200004',1300);
insert into sale values('200005',1400);
insert into sale values('200006',1500);
insert into sale values('200007',1600);
insert into sale values('200101',1100);
insert into sale values('200202',1200);
insert into sale values('200301',1300);
insert into sale values('200008',1000);
commit;

SQL>; select rownum,month,sell from sale where rownum=1;(可以用在限制返回记录条数的地方,保证不出错,如:隐式游标)

   ROWNUM MONTH       SELL
--------- ------ ---------
        1 200001      1000

SQL>; select rownum,month,sell from sale where rownum=2;(1以上都查不到记录)

没有查到记录

SQL>; select rownum,month,sell from sale where rownum>;5;
(由于rownum是一个总是从1开始的伪列,Oracle 认为这种条件不成立,查不到记录)


没有查到记录

只返回前3条纪录
SQL>; select rownum,month,sell from sale where rownum<4;

   ROWNUM MONTH       SELL
--------- ------ ---------
        1 200001      1000
        2 200002      1100
        3 200003      1200


如何用rownum实现大于、小于逻辑?(返回rownum在4—10之间的数据)(minus操作,速度会受影响)
SQL>; select rownum,month,sell from sale where rownum<10
  2  minus
  3  select rownum,month,sell from sale where rownum<5;

   ROWNUM MONTH       SELL
--------- ------ ---------
        5 200005      1400
        6 200006      1500
        7 200007      1600
        8 200101      1100
        9 200202      1200

想按日期排序,并且用rownum标出正确序号(有小到大)
SQL>; select rownum,month,sell from sale order by month;

   ROWNUM MONTH       SELL
--------- ------ ---------
        1 200001      1000
        2 200002      1100
        3 200003      1200
        4 200004      1300
        5 200005      1400
        6 200006      1500
        7 200007      1600
       11 200008      1000
        8 200101      1100
        9 200202      1200
       10 200301      1300

查询到11记录.

可以发现,rownum并没有实现我们的意图,系统是按照记录入库时的顺序给记录排的号,rowid也是顺序分配的

SQL>; select rowid,rownum,month,sell from sale order by rowid;

ROWID                 ROWNUM MONTH       SELL
------------------ --------- ------ ---------
000000E4.0000.0002         1 200001      1000
000000E4.0001.0002         2 200002      1100
000000E4.0002.0002         3 200003      1200
000000E4.0003.0002         4 200004      1300
000000E4.0004.0002         5 200005      1400
000000E4.0005.0002         6 200006      1500
000000E4.0006.0002         7 200007      1600
000000E4.0007.0002         8 200101      1100
000000E4.0008.0002         9 200202      1200
000000E4.0009.0002        10 200301      1300
000000E4.000A.0002        11 200008      1000

查询到11记录.

正确用法,使用子查询
SQL>; select rownum,month,sell from (select month,sell from sale group by month,sell) where rownum<13;

   ROWNUM MONTH       SELL
--------- ------ ---------
        1 200001      1000
        2 200002      1100
        3 200003      1200
        4 200004      1300
        5 200005      1400
        6 200006      1500
        7 200007      1600
        8 200008      1000
        9 200101      1100
       10 200202      1200
       11 200301      1300

按销售金额排序,并且用rownum标出正确序号(有小到大)
SQL>; select rownum,month,sell from (select sell,month from sale group by sell,month) where rownum<13;

   ROWNUM MONTH       SELL
--------- ------ ---------
        1 200001      1000
        2 200008      1000
        3 200002      1100
        4 200101      1100
        5 200003      1200
        6 200202      1200
        7 200004      1300
        8 200301      1300
        9 200005      1400
       10 200006      1500
       11 200007      1600

查询到11记录.

利用以上方法,如在打印报表时,想在查出的数据中自动加上行号,就可以利用rownum。

返回第5—9条纪录,按月份排序
SQL>; select * from (select rownum row_id ,month,sell 
  2  from (select month,sell from sale group by month,sell)) 
  3  where row_id between 5 and 9;

    ROW_ID MONTH        SELL
---------- ------ ----------
         5 200005       1400
         6 200006       1500
         7 200007       1600
         8 200008       1000
         9 200101       1100
分享到:
评论

相关推荐

    ORACLE 中ROWNUM用法总结

    以下将详细解析`ROWNUM`的特性和使用方法,帮助理解和避免常见的陷阱。 ### ROWNUM的基本特性 `ROWNUM`是一个伪列,它并不存储在表中,而是在查询执行过程中动态生成,用来表示查询结果中的行序号。`ROWNUM`始终从...

    rownum用法(不使用minus)

    ### rownum用法详解 #### 一、rownum基本概念 `rownum` 是 Oracle 数据库中的一个特殊字段,主要用于给查询结果集中的每一行分配一个唯一的序号,该序号从 1 开始递增。`rownum` 的主要用途之一是用于实现分页查询...

    rowid与rownum区别

    ORACLE 中ROWNUM用法总结!数据库管理员及程序开发员必看。

    oracle中rownum的用法

    ### Oracle中的ROWNUM使用详解 #### 一、ROWNUM简介 在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,它为查询结果中的每一行分配一个唯一的行号。这个行号从1开始,每增加一行,行号就递增1。`ROWNUM`对于数据...

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

    本文将详细介绍 Oracle 中 ROWNUM 的使用方法,并与 SQL Server 中相应的功能进行对比分析。 #### Oracle ROWNUM 基础用法 1. **ROWNUM 的默认行为:** - 在 Oracle 中,ROWNUM 默认从 1 开始计数,对于每一行...

    oracle中利用关键字rownum查询前20名员工信息及rownum用法

    在标题和描述中提到的示例,查询前20名员工信息,正确的方法是先对数据进行排序,然后再使用ROWNUM进行限制。例如: ```sql SELECT ROWNUM, first_name, salary FROM ( SELECT first_name, salary FROM employees...

    在oracle中灵活使用Rownum和rowId

    本文将详细介绍这两个概念的区别及其使用方法,并通过示例来帮助读者更好地理解。 #### 一、ROWNUM 的使用与特性 ##### 1. ROWNUM 的基本概念 `ROWNUM` 是Oracle系统为每一行返回的结果集自动分配的一个序号。这...

    oracle_SQL中ROWID与ROWNUM的使用

    ### Oracle SQL中ROWID与...#### 小结 - `ROWNUM` 主要用于限制结果集的大小,实现 TOP-N 查询。 - `ROWID` 则用于快速定位表中的具体行,提高检索效率。 - 在实际应用中,根据不同的需求选择合适的工具是非常重要的。

    oracle_SQL中rowid与rownum的使用

    总结,`ROWID`和`ROWNUM`在Oracle SQL中各自扮演着不可或缺的角色。`ROWID`提供了直接访问数据的快速途径,而`ROWNUM`则为数据操作提供了行级别的控制。理解和熟练运用这两个特性,能够显著提升数据库查询和管理的...

    C# Mysql 查询 Rownum的解决方法

    总结来说,C#与MySQL进行查询时,若需要模拟Rownum功能,可以使用用户定义的变量。当在C#程序中执行此类查询遇到问题时,检查并确保连接字符串包含`Allow User Variables=True`参数。此外,确保正确处理日期和时间的...

    oracle中取中间记录的方法

    需要注意的是,`ROWNUM`只能在`SELECT`语句中使用,并且它会根据查询的结果集进行编号,因此,在使用时需格外注意其使用的限制条件。 #### 使用MINUS获取中间记录 接下来,我们将详细介绍如何使用`MINUS`操作符...

    七种数据库中Select Top的用法

    #### 一、Oracle 数据库中的 ROWNUM 用法 在 Oracle 数据库中,`ROWNUM` 是一个特殊的伪列,它为每一行返回一个唯一的整数,从 1 开始递增。使用 `ROWNUM` 可以方便地限制查询结果集中的行数。 ##### 1. 查询指定...

    Oracle使用疑难问题汇总

    教程名称:Oracle使用疑难问题汇总课程目录:【】Oracle DBA优化数据库性能心得体会【】ORACLE 中ROWNUM用法总结【】Oracle 查询表空间使用情况(经典篇)【】Oracle下巧用bulk collect实现cursor批量fetch【】...

    Sql常见面试题(总结)

    2. **错误用法:** 如果先使用 ROWNUM 过滤,再排序,则可能会导致结果不准确。因为 ROWNUM 只会在子查询中计算一次,过滤后再排序不会改变 ROWNUM 的值。 **拓展知识点:** - 如何实现更灵活的分页查询?可以考虑...

    如何在Oracle中实现SELECT_TOP_N的方法

    总结来说,Oracle中实现`SELECT TOP N`的方法主要是通过`ROWNUM`和`ORDER BY`的组合,通过嵌套查询来实现不同场景下的数据筛选。这种方法虽然比SQL Server中的`TOP`语法稍微复杂,但在Oracle环境下是有效且常用的...

    Oracle中如何用一条SQL快速生成10万条测试数据

    在示例SQL中,使用`to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss')`来生成一个递增的时间戳序列。这里,`sysdate`获取当前系统日期和时间,而`rownum/24/3600`则是将ROWNUM转换为小时数,再转换为天数...

    Oracle 3种分页SQL方法比较

    总结来说,ROWNUM是最基础的分页方式,适合小数据量或无需排序的情况;ROWNUM结合子查询能保证有序分页,但效率较低;Oracle 12c的FETCH NEXT WITH OFFSET是更现代的分页方式,兼顾可读性和性能。在实际应用中,应...

Global site tag (gtag.js) - Google Analytics