rownum和row_number()的区别
今天在看书的时候看到了row_number()函数,觉得有点眼熟,想起来之前在论坛上很多帖子里都看到有人使用rownum。一开始以为自己眼花看错了,去网上搜了一下,果然是两个不同的函数。搜了些内容,做了做实验,下面说一下自己对它们的理解。
row_number()函数的基本语法为:row_number() over(order by COLUMN_NAME) ,此函数还提供了排序的功能。
在oracle中有rownum和row_number()函数能达到类似的效果,只是没有排序。但是row_number()也有存在的必要性,有些场合有使用的必要性。
我们看下面这个例子
SQL> select * from dept 2 where rownum<=3 3 order by deptno; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO
这个时候可能你想改变一下WHERE条件,查出第二到第三条记录。
SQL> select * from dept 2 where rownum between 2 and 3 3 order by deptno; no rows selected
啊哦……出错了,没有返回值。这是由rownum的特性(没有1就不会有2,没有3……以此类推下去)决定的,相关内容可以查阅相关资料。
可以结合row_number() 函数来完成此功能。
SQL> select * from 2 ( 3 select row_number() over(order by deptno) row_num,deptno,dname,loc 4 from dept 5 )a 6 where a.row_num between 2 and 3; ROW_NUM DEPTNO DNAME LOC ---------- ---------- -------------- ------------- 2 20 RESEARCH DALLAS 3 30 SALES CHICAGO SQL>
还有另外一个区别,就是使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而函数row_number()在包含排序从句后是先排序再计算行号码。
SQL> select deptno,dname,rownum,row_number() over(order by dname) from dept orde r by dname; DEPTNO DNAME ROWNUM ROW_NUMBER()OVER(ORDERBYDNAME) ---------- -------------- ---------- ------------------------------ 10 ACCOUNTING 1 1 40 OPERATIONS 4 2 20 RESEARCH 2 3 30 SALES 3 4 SQL>
差不多就这些了吧,有其他内容的话欢迎大家补充。
rownum和row_number()的区别相关推荐
- oracle中rownum和row_number()的区别
见:http://www.jb51.net/article/65960.htm row_number()over(partition by col1 order by col2)表示根据col1分组, ...
- oracle+rownum(),Oracle rownum和row_number()
rownum 和 row_number()的区别 一. Oracle中的rownum 用于从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依次类推.这个伪字段可以用于限制查询返回的总行数,而 ...
- ROWNUM 与 ROW_NUMBER()OVER() 的区别
对于rownum和row_number()over()函数并没有太大差异. row_number()函数的基本语法为:row_number() over(order by COLUMN_NAME) , ...
- oracle rownum_,oracle中rownum和row_number()
row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内 ...
- Oracle中rank() over, dense_rank(), row_number() 的区别
Oracle中rank() over, dense_rank(), row_number() 的区别 假设现在有一张学生表student,学生表中有姓名.分数.课程编号,现在我需要按照课程对学生的成绩 ...
- oracle伪列ROWNUMBER,oracle 中 rownum 和 row_number()
简单的介绍下oracle 中rownum 和 row_number() 使用,实例演示. 参照:http://www.cnblogs.com/zjrstar/archive/2006/08/31/49 ...
- oracle数据库rank over用法,Oracle中rank() over, dense_rank(), row_number() 的区别
Oracle中rank() over, dense_rank(), row_number() 的区别 假设现在有一张学生表student,学生表中有姓名.分数.课程编号,现在我需要按照课程对学生的成绩 ...
- oracle中rownum和row_number()
row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内 ...
- rank() over,dense_rank(),row_number() 的区别
转自:https://jingyan.baidu.com/article/597035521ff2ec8fc107404b.html rank() over是的作用是查出指定条件后进行一个排名,但是有 ...
最新文章
- java applet 官网_java applet
- 为什么计算机存储的是二进制补码?
- java中do loop的使用_Java中do-while循环——通过示例学编程(11)
- dojo中的dojo/dom-attr
- d3.js 简介和安装
- 技术动态 | 北京大学计算机所邹磊教授研究组开源面向 RDF 知识图谱的自然语言问答系统 gAnswer...
- 高并发下如何保证数据的一致性
- 习题4-8 高空坠球(20 分)
- MongoDB最佳实践
- 开发者服务器怎么发送公众号上的消息,微信公众号发送提醒消息
- android消息提示框大小,android Toast設置彈框大小
- 浅谈framework之InputManagerService
- Keepalived主主虚拟路由器与虚拟服务器
- [视频编码] BD-rate和BD-PSNR
- 程序人生:我,颓废3年,怒加薪26K:成年人最顶级的自律,是逆着人性做事
- chrome谷歌小恐龙作弊代码【无敌,快跑,高跳,一键满分】有需要的小伙伴快快看过来!
- 机器学习应用设计阶段的 10 个陷阱和 11 个最佳实践
- 用金属铂做电极的高压电容
- XP框架 微X插件/抖音插件/微信机器人 /自动抢红包 等等天堂级功能....
- MEM/MBA数学强化(04)方程 函数 不等式