oracle数据库中 rownum 和row_number()的区别和练习

明确对于rownum 来说 它是oracle 系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是二,以此类推,这个为字段可以用于限制查询的返回的总行数,因为rownum总是从1开始,但是1以上的自然数在rownum 做等于判断时都认为是false 条件,所以无法查到 rownum=n (n》1的自然数),所以查找第二行以后的记录可以用子查询方法来解决,给子查询中的rownum取别名;对于小于某个值的情况两种方法都差不多,但是对于某个不等于一的值或者求某个值到某个值之间的情况,用row_number() 别名获得排名 ,比用rownum伪列要简单方便的多;因为伪列总是从一开始查找;
具体用法和区别参见以下代码;

--取出工资最高的前5位

select empno,ename,sal,rownum from emp;

select *  from (select *  from emp order by sal desc) where rownum<=5;

select * from (select ename,sal,row_number() over(order by sal desc) as num from emp) where num<=5;

select * from (select ename,sal,row_number() over(order by sal desc)  from emp) where rownum<=5

--工资的前3名
select * from emp where sal >=any(select * from (select sal from emp order by sal desc) where rownum<=3);

select * from(select * from emp order by sal desc) where rownum <4;

select * from (select ename,sal,empno,deptno ,row_number() over (order by sal desc) from emp)  where rownum<4;

select * from (select ename,sal,empno,deptno ,row_number() over (order by sal desc) as num from emp)  where num<4

--按照工资排序,取出第6名到第10名
--使用伪列获得
select * from (select ename,sal,rownum r from (select * from emp order by sal desc) where rownum<=10) where r>5;

--使用排名函数获得
select * from (select ename,sal,row_number() over(order by sal desc) as num from emp) where num>5 and num<=10;

------- 按工资从高到低获得工资排名第四的员工

select * from (select ename,sal,row_number() over(order by sal desc) as num from emp) where num=4;

select * from (select ename,sal,rownum r from (select * from emp order by sal desc) where rownum<=4) where r=4;

【企业框架源码】 SpringMVC mybatis or hibernate ehcache二级缓存maven非和maven版本【websocket即时通讯】获取【下载地址】

时间: 2024-12-19 23:11:28

oracle数据库中 rownum 和row_number()的区别和练习的相关文章

Oracle中rownum和row_number()的区别

Oracle中 rownum,为符合where条件的输出结果集中现在有多少条记录. where条件中的rownum可以这样理解 select中的rownum可以理解为,将这条记录放到输出结果集中,就在这条记录中加上这个是第几行(输出一行生成一个) row_number() OVER (ORDER BY id),为结果记录集生成后,按给定字段排序后的行号 注意这两者都是在order by条件之前执行的.

oracle数据库中游标和序列的区别

两者是完全不同的东西游标是基于查询结果集的比方说你的一个select语句查询出了若干条记录这样一个结果集,如果你想对结果集中的每一行都进行一个判断或则其他操作,那么用sql语句的update或者就不能满足针对每一行的特定操作,这个时候游标就发挥作用了:你可以把这个结果集定义成一个游标,通过游标的操作形式,你可以遍历结果集中的每一行记录并可以对它进行操作,也就是你可以通过游标对一个select查询出的结果执行for循环来遍历操作数据.而序列则是oracle中的一种对象,就像表.视图一样,你可以像建

ORACLE 中rownum和row_number()的使用区别(可指定取sql结果集的第几个数据)

这篇文章主要介绍了oracle中rownum和row_number()的使用方法以及区别和联系,十分的详细,有需要的小伙伴可以参考下. row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). 与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而row_number()在包含排序从句后

【转】oracle中rownum和row_number()

这篇文章主要介绍了oracle中rownum和row_number()的使用方法以及区别和联系,十分的详细,有需要的小伙伴可以参考下. row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). 与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而row_number()在包含排序从句后

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 st

随机获取oracle数据库中的任意一行数据(rownum)

最近看oracle资料的时候,了解rownum的概念,以前只知道对数据库表进行简单的增删改查: 看到了rownum的概念后,突然想到了好多业务场景应该都可以适用的,比如在进行随机发奖的时候, 我们就可以从先查一下奖品表中可以发的总奖品数,然后通过java的Random类在总奖品数内生成一个随机整数X,然后调用 select * from (select rownum no,id from Table where rownum<=X ) where no >=X 获取出该条奖品,这样获取出来的值

oracle数据库中提供的5种约束

约束作用:用来保持数据的完整性,防止无效数据进入到数据库中.oracle数据库中提供的5种约束,都是限定某个列或者列的组合的.1.主键约束(PRIMARY KEY):在一个表中能唯一的标识一行.主键可以限定在多个列上.2.唯一键约束(UNIQUE key):在一个表中能唯一的标识一行,唯一键也可以限定在多个列上.主键和唯一键的区别:a.一个表中最多只能有一个主键.可以多个唯一键.b.主键所限定的列不能为null,唯一键所限定的列可以为null.3.外键约束(FOREIGN key):   引用表

Oracle数据库中的blob类型解析

Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据. 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何获得Blob的cursor呢? 这需要你先插入一个empty的blob,这将创建一个blob的cursor,然后你再把这个empty的blob的cursor用select查询出来,这样通过两步操作

转: Oracle Form 中commit 与do_key(&#39;commit_form&#39;)区别

1.commit_form针对form上面的数据变动进行commit,对于代码中的类似update,insert语句也进行提交:如果form上面的数据变动和代码中的数据变动有冲突,最后以界面上的为准.2.do_key('commit_form')会首先寻找form下的triggers中的KEY-COMMIT这个trigger,并执行KEY-COMMIT中所写的代码.如果没有KEY-COMMIT这个trigger,则会针对form和代码一起提交.如果form上面的数据变动和代码中的数据变动有冲突,