oracle 中 rownum 和 row_number()
简单的介绍下oracle 中rownum 和 row_number() 使用,实例演示。
参照:http://www.cnblogs.com/zjrstar/archive/2006/08/31/491090.html
我们先创建一个例子用以说明,偷个懒,就用上面那位童鞋的。
create table student (ID char(6), name VARCHAR2(10)); insert into student values('200001','张一'); insert into student values('200002','王二'); insert into student values('200003','李三'); insert into student values('200004','赵四'); commit;
1)
SQL> select * from student where rownum>=1;
ID NAME
------ ----------
200001 张一
200002 王二
200003 李三
200004 赵四
2)
SQL> select rownum ,t.* from student t where rownum>=1;
ROWNUM ID NAME
---------- ------ ----------
1 200001 张一
2 200002 王二
3 200003 李三
4 200004 赵四
3)
SQL> select rownum ,t.* from student t where rownum <3;
ROWNUM ID NAME
---------- ------ ----------
1 200001 张一
2 200002 王二
4)
SQL> select rownum ,t.* from student t where rownum >=2;
未选定行
SQL>
Why?=>1.rownum是一个伪列;rownum总是从1开始,连续不断。
5)
SQL> select rownum,t.* from student t order by name desc;
ROWNUM ID NAME
---------- ------ ----------
4 200004 赵四
1 200001 张一
2 200002 王二
3 200003 李三
6)
SQL> select row_number() over(order by name desc) rn ,t.* from student t;
RN ID NAME
---------- ------ ----------
1 200004 赵四
2 200001 张一
3 200002 王二
4 200003 李三
以上5)和6)可以做比较:为什么两者的结果rownum和rn不同,注意row_number() over(...)用法。
7)
SQL> select * from (select rownum rn,t.* from student t) tt where tt.rn between
2 and 3;
RN ID NAME
---------- ------ ----------
2 200002 王二
3 200003 李三
这种方式可以分页取数据,但是请记得上述的5),伪列rownum不是有序的;如果要进行排序的话,请尽量使用 rownumber() over(...)
8)
SQL> select * from (select row_number() over(order by name desc) rn ,t.* from st
udent t) tt where tt.rn between 2 and 3;
RN ID NAME
---------- ------ ----------
2 200001 张一
3 200002 王二
9)
SQL> select * from (select rownum rn ,t.* from student t order by name desc)tt w
here tt.rn between 2 and 3;
RN ID NAME
---------- ------ ----------
2 200002 王二
3 200003 李三
请比较8)和9) 理解7)下的注示。
好吧,就这么多吧,我想上面举得这些例子,已经将rownum 和 row_number 常见用法,以及各自的特征用法都做了举例。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?