今天在看书的时候看到了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()的区别相关推荐

  1. oracle中rownum和row_number()的区别

    见:http://www.jb51.net/article/65960.htm row_number()over(partition by col1 order by col2)表示根据col1分组, ...

  2. oracle+rownum(),Oracle rownum和row_number()

    rownum 和 row_number()的区别 一. Oracle中的rownum 用于从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依次类推.这个伪字段可以用于限制查询返回的总行数,而 ...

  3. ROWNUM 与 ROW_NUMBER()OVER() 的区别

    对于rownum和row_number()over()函数并没有太大差异. row_number()函数的基本语法为:row_number() over(order by COLUMN_NAME) , ...

  4. oracle rownum_,oracle中rownum和row_number()

    row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内 ...

  5. Oracle中rank() over, dense_rank(), row_number() 的区别

    Oracle中rank() over, dense_rank(), row_number() 的区别 假设现在有一张学生表student,学生表中有姓名.分数.课程编号,现在我需要按照课程对学生的成绩 ...

  6. oracle伪列ROWNUMBER,oracle 中 rownum 和 row_number()

    简单的介绍下oracle 中rownum 和 row_number() 使用,实例演示. 参照:http://www.cnblogs.com/zjrstar/archive/2006/08/31/49 ...

  7. oracle数据库rank over用法,Oracle中rank() over, dense_rank(), row_number() 的区别

    Oracle中rank() over, dense_rank(), row_number() 的区别 假设现在有一张学生表student,学生表中有姓名.分数.课程编号,现在我需要按照课程对学生的成绩 ...

  8. oracle中rownum和row_number()

    row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内 ...

  9. rank() over,dense_rank(),row_number() 的区别

    转自:https://jingyan.baidu.com/article/597035521ff2ec8fc107404b.html rank() over是的作用是查出指定条件后进行一个排名,但是有 ...

最新文章

  1. java applet 官网_java applet
  2. 为什么计算机存储的是二进制补码?
  3. java中do loop的使用_Java中do-while循环——通过示例学编程(11)
  4. dojo中的dojo/dom-attr
  5. d3.js 简介和安装
  6. 技术动态 | 北京大学计算机所邹磊教授研究组开源面向 RDF 知识图谱的自然语言问答系统 gAnswer...
  7. 高并发下如何保证数据的一致性
  8. 习题4-8 高空坠球(20 分)
  9. MongoDB最佳实践
  10. 开发者服务器怎么发送公众号上的消息,微信公众号发送提醒消息
  11. android消息提示框大小,android Toast設置彈框大小
  12. 浅谈framework之InputManagerService
  13. Keepalived主主虚拟路由器与虚拟服务器
  14. [视频编码] BD-rate和BD-PSNR
  15. 程序人生:我,颓废3年,怒加薪26K:成年人最顶级的自律,是逆着人性做事
  16. chrome谷歌小恐龙作弊代码【无敌,快跑,高跳,一键满分】有需要的小伙伴快快看过来!
  17. 机器学习应用设计阶段的 10 个陷阱和 11 个最佳实践
  18. 用金属铂做电极的高压电容
  19. XP框架 微X插件/抖音插件/微信机器人 /自动抢红包 等等天堂级功能....
  20. MEM/MBA数学强化(04)方程 函数 不等式

热门文章

  1. Openlayers5 + Geoserver 实现wfs的属性查询与空间查询
  2. Python案例——利用接口实现【自动抠图+改色】
  3. java实现汉字转拼音
  4. ryzen linux 搭配显卡,AMD 锐龙 Ryzen7 1700X配什么显卡最为均衡合理?
  5. Windows Mobile系统程序与控制面板命令参数
  6. Java中各种BO、POJO类
  7. 希望可以帮到正在奔波的你—常见安卓面试题
  8. 原型链的继承都发生在构造函数上
  9. Power BI饼图
  10. 如何安装 mac El Capitan 系统