ROWNUM 与 ROW_NUMBER()OVER() 的区别
来源:互联网 发布:单片机程序员招聘 编辑:程序博客网 时间:2024/05/20 09:25
对于rownum和row_number()over()函数并没有太大差异。
row_number()函数的基本语法为:row_number() over(order by COLUMN_NAME) ,此函数还提供了排序的功能。
如果是在分页的场合下,我们首推row_number()over()函数。
我们已员工表为例子:
–查询(薪水从高到底的)员工信息
SELECT rownum,e.* FROM emp e ORDER BY sal;
结果:
–问题:为什么Order by以后行号(ROWNUM)是乱的。
–原因:先分配了行号(ROWNUM),再根据sal排序。
分页:
<1>第一页数据
SELECT ROWNUM ,t.* FROM ( SELECT e.* FROM emp e ORDER BY e.sal DESC ) t WHERE ROWNUM between 1 AND 3
结果:
<2>第二页数据
SELECT ROWNUM ,t.* FROM ( SELECT e.* FROM emp e ORDER BY e.sal DESC ) t WHERE ROWNUM between 4 AND 6
结果:
结果集为空!我们不难发现,ROWNUM必须从1开始!这是由rownum的特性(没有1就不会有2,没有3……以此类推下去),就像我一哥们说:没有父亲,哪来儿子!
问题:那么可能会有疑问,如何正确显示第二页的数据呢?
有两种方法:
第一种:以上的sql语句再嵌套一个SELECT语句
SELECT k.* FROM ( SELECT ROWNUM r,t.* FROM ( SELECT e.* FROM emp e ORDER BY e.sal DESC ) t ) kWHERE r between 4 AND 6
结果:
第二种:使用ROW_NUMBER()OVER()函数
select t2.* from (select t.*, row_number() over(order by t.sal desc) orderNumber from emp t ) t2 where orderNumber between 4 and 6;
结果:
两者在效率上没有任何差异,如果是对索引列进行排序的时候,row_number()over()函数有明显优势。
转自:http://www.cnblogs.com/zhangrongqi/archive/2011/12/13/2285465.html
1 0
- ROWNUM 与 ROW_NUMBER()OVER() 的区别
- ROWNUM 与ROW_NUMBER()OVER()
- oracle中rownum和row_number()over()的区别
- ROW_NUMBER() OVER ,ROWNUM , OVER()
- rownum&row_number() over(order by column)区别
- Rownum和row_number() over()的使用
- Oracle Rownum和row_number() over()的使用
- Rownum和row_number() over()的使用
- oracle Rownum和row_number() over()的使用
- rownum和row_number()的区别
- ROWNUM与ROW_NUMBER()的体验
- rank() over,dense_rank() over,row_number() over函数的区别
- oracle中rownum和row_number()的区别
- rownum,rowid,row_number() over等区分
- rank() over,dense_rank() over,row_number() ove的区别
- Oracle中rownum、rowid、row_number()、rank()、dense_rank()的区别
- ORACLE中的rownum排序及row_number()排序的区别
- 【Oracle】【SQL】rownum, row_number() 和 rank()的区别
- Linux下的hosts文件
- 1006. Sign In and Sign Out (25)
- sql建自增序列号
- Reverse Linked List
- 【中文分词】亲手开发一款中文分词器--前言
- ROWNUM 与 ROW_NUMBER()OVER() 的区别
- C#使用Log4Net记录日志
- C#设计模式学习之【单例模式】
- HTML基础介绍二(图像和超级链接)
- ReactiveCocoa - iOS开发的新框架
- 台大机器学习基石笔记(二)——VC 维1
- ipv6 记录1
- poi导入导出excel文件,兼容.xls和.xlsx两种格式
- STL - priority_queue(优先队列)