rownum使用说明
参考: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使用说明的更多相关文章
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
- ORACLE 中ROWNUM用法总结(转)
ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...
- SQL中TOP,LIMIT,ROWNUM的用法
SQL SERVER/MS Access的Select Top的用法: Select TOP number|percent table_columname FROM tablename MySQL/O ...
- oracle中row_number和rownum的区别和联系(翻译)
http://www.tuicool.com/articles/bI3IBv 附问题:有以下一个SQL语句: SELECT * FROM ( SELECT t.*, row_number() OVER ...
- “我爱背单词”beta版发布与使用说明
我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院 拒 ...
- Oracle 中 union 和union all 的简单使用说明
1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...
- SQL基础--ROWNUM伪列
ROWNUM伪列 的概念: rownum表示的是一个数据行编号的伪列,它的内容是在用户查询数据时,为用户动态分配的一个数组(行号). 注意它是随机生成的,并不是和某一行数据绑定在一起的. 观察rown ...
- Map工具系列-02-数据迁移工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
随机推荐
- 浅析HashMap和Hashtable的区别
HashMap和Hashtable两个类都实现了Map接口,二者保存键值对(key-value对): HashMap和HashTable区别 第一,继承的父类不同.HashMap继承自Abstract ...
- 93.数字三角形W(深搜)
2189 数字三角形W 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 数字三角形 要求走到最后mod 10 ...
- [转]Spring配置之OpenSessionInViewFilter
参考: OpenSessionInViewFilter作用及配置:http://www.yybean.com/opensessioninviewfilter-role-and-configuratio ...
- Linux下Apache、PHP、MySQL默认安装路径
Apache: 如果采用RPM包安装,安装路径应在 /etc/httpd 目录下 Apache配置文件:/etc/httpd/conf/httpd.conf Apache模块路径:/usr/sbin/ ...
- java自带的jvm分析工具
http://domark.iteye.com/blog/1924302 这段时间觉得很有必要对java的内存分析工具进行熟悉,这样以后出现机器负载较高,或者反应很慢的时候,我就可以查找原因了.上 ...
- SAP MM 模块常用的数据表
SAP MM模块常用数据表: Table Table Class Application Class Data Class Description EBAN TRANSP ME Transactio ...
- 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- Windows删除文件时出现,“正在准备 再循环”
初步分析这个问题是由于文件写入时,由于意外事情的发生(如,文件太大,正在写入时你取消了,而系统又没有来得及删除没有写完的数据等原因)没有写完. 错误的类型如下 出现此问题.当你删除不成时.返回系统根目 ...
- CKFinder的_thumbs缓存文件夹
<CKFinder2.0.2的使用与破解> 作者: 宓晨 说下背景,发下牢骚! 由于网站需要支持对图片的上传以及操作的管理,还有文字+图片的组合上传.问了一下同 ...
- 深入分析JavaWeb Item40 -- 文件上传和下载
在Web应用系统开发中,文件上传和下载功能是很经常使用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传.浏览器在上传的过程中是将文件以流的形式提交到server端的.假设 ...