参考:http://www.blogjava.net/conans/articles/219693.html

参考:http://www.blogjava.net/freeman1984/archive/2011/01/20/343253.html

rowid 和 rownu : http://www.2cto.com/database/201308/234809.html

  对于 Oracle 的 rownum 问题,原始SQL不支持>,>=,=(除=1外),between...and,只能用以上符号(<、<=),!=的话也会有些问题,经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇。

  ROWNUM是一种伪列,它会根据返回记录生成一个序列化的数字。利用ROWNUM,我们可以生产一些原先难以实现的结果输出,但因为它是伪列的这个特殊性,我们在使用时也需要注意一些事项,不要掉入“陷阱”。下面就介绍一下它的使用技巧及注意事项。

1、常用方式总结

  1.1 TOP N 结果

   这个比较简单,但如果你希望对一个排序结果取Top N数据的话,使用ROWNUM存在一些“陷阱”,我们后面部分会介绍这些“陷阱”并且说明如何避免。

 sql> select * from t_test4

   2  where rownum <= 5;

 USERNAME                          USER_ID CREATED

 ------------------------------ ---------- ---------

 WOW                                    71 26-APR-07

 CS2                                    70 15-JAN-07

 3                                      69 01-NOV-06

 DMP                                    68 12-OCT-06

 PROFILER                               67 05-SEP-06

  1.2 分页查询,下面返回结果中的第10到第15条记录:

 select * from (
selelct s.*,rownum rn from t_student s
where rownum <= 15 order by s.create_time,s.id
) a
where a.rn >10
 select * from (
select s.*,rownum from t_student s
order by s.create_time,s.id
) a
where a.rownum bettween 10 and 15;

 1.3

--select a.class_date,rownum,a.start_time,b.class_date,b.minson
select decode(rownum-b.minson,0,a.class_date,null),decode(rownum-b.minson,0,1,rownum+1-b.minson) sno,a.start_time
from
( select class_date,start_time from t_class order by class_date,start_time ) a,
( select class_date,min(rownum) as minson from (select * from t_class order by class_date,start_time) group by class_date ) b
where a.class_date=b.class_date
order by a.class_date;

select decode(rownum-b.minson,0,a.class_date,null),decode(rownum-b.minson,0,1,rownum+1-b.minson) sno,a.start_time
from
( select class_date,min(rownum) as minson from (select * from t_class order by class_date,start_time) group by class_date ) b
left join
( select class_date,start_time from t_class order by class_date,start_time ) a
on a.class_date=b.class_date;

3  ROWNUM的使用“陷阱”

由于ROWNUM是一个伪列,只有有结果记录时,ROWNUM才有相应数据,因此对它的使用不能向普通列那样使用,否则就会陷入一些“陷阱”当中。

  3.1     对ROWNUM进行>、>=、=操作

  不能对ROWNUM使用>(大于1的数值)、>=(大于或等于1的数值)、=(大于或等于1的数值),否则无结果

这是因为:

1、ROWNUM是伪列,有了 满足查询条件后的返回结果 之后,每条返回记录就会对应产生一个ROWNUM数值;

2、返回结果记录的ROWNUM是从1开始排序的,因此第一条始终是第一条;

 sql> select BL_REF_CDE, rownum rn from css_bl_view where rn > 1;    -无结果记录

rownum使用说明的更多相关文章

  1. Atitit.项目修改补丁打包工具 使用说明

    Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...

  2. awk使用说明

    原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...

  3. ORACLE 中ROWNUM用法总结(转)

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...

  4. SQL中TOP,LIMIT,ROWNUM的用法

    SQL SERVER/MS Access的Select Top的用法: Select TOP number|percent table_columname FROM tablename MySQL/O ...

  5. oracle中row_number和rownum的区别和联系(翻译)

    http://www.tuicool.com/articles/bI3IBv 附问题:有以下一个SQL语句: SELECT * FROM ( SELECT t.*, row_number() OVER ...

  6. “我爱背单词”beta版发布与使用说明

    我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院  拒 ...

  7. Oracle 中 union 和union all 的简单使用说明

    1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...

  8. SQL基础--ROWNUM伪列

    ROWNUM伪列 的概念: rownum表示的是一个数据行编号的伪列,它的内容是在用户查询数据时,为用户动态分配的一个数组(行号). 注意它是随机生成的,并不是和某一行数据绑定在一起的. 观察rown ...

  9. Map工具系列-02-数据迁移工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

随机推荐

  1. 【MySQL笔记】启动弹窗问题,unable to connect to remote host. catalog download has failed.

    安装完MySQL之后,它每天凌晨启动一个Intaller任务,甚是烦人:   这是一个Windows的计划服务,在这里删除即可,开始/附件/系统工具/任务计划程序,把mysql的定时任务计划取消/删除 ...

  2. 时间同步Servname not supported for ai_socktype

    rdate -s 129.7.1.66rdate: 129.7.1.66: Servname not supported for ai_socktype ntpdate 0.centos.pool.n ...

  3. gridview展开嵌套显示

    最近实在是太忙了,好几个月没有更新博客了,近来项目需要用到GRIDVIEW嵌套的,在这里跟大家分享一下,大家如有更好的解决方案,请不吝贴出.在ASP.NET中,GridView嵌套可以显示当前选定的父 ...

  4. mysql分裤分表

    1.分库分表 很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表mem ...

  5. nodejs+mysql入门实例

    此前我已准备好mysql,使用的是PHP的组合包Appserv 手动添加数据库依赖: 在package.json的dependencies中新增, “mysql” : “latest”, { &quo ...

  6. Java_导出Excel

    导出的Excel标题.Sheet名称.数据内容都可以使用中文​ 一.pom.xml引入jar包 1 2 3 4 5 <dependency>             <groupId ...

  7. MySql_安装及简单命令

    一.下载MySql http://dev.mysql.com/downloads/file/?id=461390 版本位5.7.11.0.msi,32位的,但是该版本在64位机器上也可以使用 二.安装 ...

  8. NSLog 输出格式集合

    • %@ 对象 • %d, %i  整数 • %u  无符整形 • %f  浮点/双字 • %x, %X 二进制整数 • %o  八进制整数 • %zu size_t • %p  指针 • %e  浮 ...

  9. sudoers文件属性的修改导致sudo命令失效

    1.sudoers文件属性为440 -r--r-----. 1 root root 4033 Dec 28 18:57 sudoers 2.如果修改sudoers文件属性,就会导致sudo命令不可用, ...

  10. zigbee 学习笔记

    在德州仪器的站点:http://www.ti.com.cn/tool/cn/z-stack上下载安装zigbee2007协议栈版,我的是ZStack-CC2530-2.3.0-1.4.0. 以下演示一 ...