两句话笔记,记住ROWNUM
来源:互联网 发布:表示认同的网络用语 编辑:程序博客网 时间:2024/05/24 22:45
一、rownum是什么?
1、rownum是对结果集加的一个伪列。(即先查到结果集,再加上rownum)
2、rownum总是从1开始排起的。(好比一般人数数,都是从1开始)
二、rownum怎么用?
--试验用表CREATE TABLE TABLE_DEMO (ID NUMBER(10),NAME VARCHAR2(10));--原来是用100条有序记录试验,有误。已删除<del>DECLARE I INT := 1;BEGIN LOOP INSERT INTO TABLE_EXAMPLE VALUES (I,'USER_' || I); EXIT WHEN I = 100; I := I + 1; END LOOP;END;</del>--10条无序、不重复记录INSERT INTO TABLE_DEMO VALUES ('10', 'USER_10');INSERT INTO TABLE_DEMO VALUES ('1', 'USER_1');INSERT INTO TABLE_DEMO VALUES ('8', 'USER_8');INSERT INTO TABLE_DEMO VALUES ('4', 'USER_4');INSERT INTO TABLE_DEMO VALUES ('6', 'USER_6');INSERT INTO TABLE_DEMO VALUES ('5', 'USER_5');INSERT INTO TABLE_DEMO VALUES ('3', 'USER_3');INSERT INTO TABLE_DEMO VALUES ('7', 'USER_7');INSERT INTO TABLE_DEMO VALUES ('9', 'USER_9');INSERT INTO TABLE_DEMO VALUES ('2', 'USER_2');
1、查询第n条记录
(1)n=1时
简单地查出第1条。--查出第1条SELECT * FROM TABLE_DEMO T WHERE ROWNUM = 1;返回结果:
ID NAME
10 USER_10
按ID递增排序,查出第1条。①错误做法:
--按ID递增排序,查出第1条【错误】SELECT * FROM TABLE_DEMO T WHERE ROWNUM = 1 ORDER BY T.ID ASC;返回结果:
ID NAME
10 USER_10
原因:rownum是对结果集加的一个伪列;Oracle是先给记录一个ROWNUM,再进行ORDER BY。当在where子句中使用rownum的时候,限制返回的行数为1,然后对唯一的这一条记录进行排序。②正确做法:
--按ID递增排序,查出第1条【正确】SELECT * FROM (SELECT * FROM TABLE_DEMO T ORDER BY T.ID ASC) WHERE ROWNUM = 1;返回结果:ID NAME
1 USER_1(2)n>1时
例如:查第2条。①错误做法
--查出第2条【错误】SELECT * FROM TABLE_DEMO T WHERE ROWNUM = 2;返回结果:
(空)
个人理解:rownum是对结果集加的一个伪列。所以查询时,每取到一条,就会去校验一下条件:WHERE ROWNUM = 2又由于,rownum总是从1开始排起的。实际rownum=1 ≠ 2。所以,记录被舍弃。
以此类推,所有的记录都逐一被舍弃,最终返回空。网上查到的解释:“1”以上的自然数,在rownum做等于判断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数)。
②正确做法
--查出第2条【正确】SELECT * FROM (SELECT ROWNUM RN, T.* FROM TABLE_DEMO T) WHERE RN = 2返回结果:RN ID NAME
2 1 USER_1
2、查询前n条
--请按ID递增排序,查出前5条记录。SELECT * FROM (SELECT * FROM TABLE_DEMO T ORDER BY T.ID ASC) WHERE ROWNUM <= 5;返回结果:
ID NAME
1 USER_1
2 USER_2
3 USER_3
4 USER_4
5 USER_5
3、查询后n条
目前只想到先递减排序,取结果集,再递增排序。
--请按ID递增排序,查出后5条记录。SELECT * FROM (SELECT * FROM TABLE_DEMO T ORDER BY T.ID DESC) C1 WHERE ROWNUM <= 5 ORDER BY C1.ID ASC返回结果:ID NAME
6 USER_6
7 USER_7
8 USER_8
9 USER_9
10 USER_10
4、查询第m条到第n条
例如,m=3,n=7。
--请按ID递增排序,查出第3条至第7条记录。(即第3、4、5、6、7这五条)SELECT * FROM (SELECT ROWNUM RN, C1.* FROM (SELECT T.* FROM TABLE_DEMO T ORDER BY T.ID ASC) C1) WHERE RN >= 3 AND RN <= 7;返回结果:RN ID NAME
3 3 USER_3
4 4 USER_4
5 5 USER_5
6 6 USER_6
7 7 USER_7
0 0
- 两句话笔记,记住ROWNUM
- 记住这句话...SOAP
- 记住亦舒77句话
- 该记住的10句话
- 该记住的23句话。
- 心烦时记住三句话
- 五句话,记住就好
- 心烦时记住三句话
- 需要记住的几句话
- 突然想起两句话
- 很喜欢的两句话
- 摘抄两句话
- 两句话木马解析
- 共勉两句话
- 两句话的启示
- 比对两句话
- 学习两句话
- 两句话治疗颈椎病
- 通过tar包升级mysql5.6
- Ubuntu14.04下启动栏打开chrome产生两个图标的解决办法
- 在某些项目进行开发的时候,需要提升应用程序本身的权限,这个是很容易的。
- UVa 10285 - Longest Run on a Snowboard
- iOS内存警告didReceiveMemoryWarning
- 两句话笔记,记住ROWNUM
- Core Animation 再次浅析
- 三大WEB服务器对比分析(apache ,lighttpd,nginx)
- 正则表达式30分钟入门教程
- socket阻塞与非阻塞,同步与异步、I/O模型
- 字符数组,字符指针,sizeof,strlen总结
- 4年前的随笔---写出高质量程序的要点
- Java SE1.6中的Synchronized
- LVS+Keepalived负载均衡实现web服务器的高可用性(虚拟机中测试)