oracle中ROWNUM使用

oracle中ROWNUM使用,第1张

Q提出想要把tableA表按照col2列排序后,找出第5-10行记录。咋搞?

按照特定条件查找出前N行数据,可以通过 ROWNUM 解决。

ROWNUM 又被称为 伪列 ,伪列就像在在表中有这么一列,但并不存储在表中,能够基于伪列进行从查询,也能够基于 ROWNUM 进行更新删除 *** 作,例如

不过由于ROWNUM会随着条件限制、表记录更改等发生变化,并不是表记录的真实值,所以尽量避免用ROWNUM来进行删改 *** 作。

ROWNUM 支持能够查出正确记录的 *** 作符为<code><</code>、<code><=</code>、<code>!=</code>、<code>=1</code>,对于<code>></code>、<code>>=</code>、<code>=N(N>1)</code>、<code>BETWEEN…AND…</code>运行时不报错,但直接使用不能查询出正确结果。

ROWNUM 是在查询出结果集后,给结果集添加上一个伪列,类似于给查询出的结果标上序号,序号从1开始,连续递增,不存在序号跳跃的现象。例如:

结果为:

如果加上限制条件:

结果为:

原来第4行会变成第3行,所以如果用<code>WHERE ROWNUM >3</code>来进行查询时,并不会有任何结果,因为第一条记录(ROWNUM=1)不满足条件被去掉后,原第二条记录就成为第一条记录(ROWNUM=1),仍旧不满足被去掉,以此类推,所以永远不会有大于3的记录。由此,使用<code>ROWNUM != 2</code>与<code>ROWNUM <2</code>等价。

回到刚开始的问题,既然ROWNUM不支持BETWEEN…AND…,>号这些,那如何得到第5-10行记录呢?

可以通过使用子集查询来解决:

使用了两次子集查询,第一次是按照col2进行排序,确保使用ROWNUM得到的是有序的结果集,第二次是用ROWNUM找出前10行记录,并将ROWNUM起别名RID保存到临时表,最后通过RID来限制第5行以后记录。这样就得到了第5-10有序记录。

对于为何先使用ORDER BY 再使用ROWNUM<=10的解释:

对于刚开始的问题,还可以使用以下子集查询进行解决:

使用MINUS

使用INTERSECT

ORACLE中的rownum

ORACLE 中ROWNUM用法总结!

select * from emp

select rownum as rn,t.* from (select * from emp) t

这样查出来的数据条数,是一样的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11835652.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存