在oracle中ROWNUM是什么东西?

 我来答
不瑶蒋酉
2020-04-11 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:34%
帮助的人:906万
展开全部
ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。
有了以上从不同方面建立起来的对
rownum
的概念,那我们可以来认识使用
rownum
的几种现像
1.
select
rownum,c1
from
t1
where
rownum
!=
10
为何是返回前9条数据呢?它与
select
rownum,c1
from
tablename
where
rownum
<
10
返回的结果集是一样的呢?
因为是在查询到结果集后,显示完第
9
条记录后,之后的记录也都是
!=
10,或者
>=10,所以只显示前面9条记录。也可以这样理解,rownum
为9后的记录的
rownum为10,因条件为
!=10,所以去掉,其后记录补上,rownum又是10,也去掉,如果下去也就只会显示前面9条记录了
2.
为什么
rownum
>1
时查不到一条记录,而
rownum
>0

rownum
>=1
却总显示所以的记录
因为
rownum
是在查询到的结果集后加上去的,它总是从1开始
3.
为什么
between
1
and
10
或者
between
0
and
10
能查到结果,而用
between
2
and
10
却得不到结果
原因同上一样,因为
rownum
总是从
1
开始
从上可以看出,任何时候想把
rownum
=
1
这条记录抛弃是不对的,它在结果集中是不可或缺的,少了rownum=1
就像空中楼阁一般不能存在,所以你的
rownum
条件要包含到
1
但如果就是想要用
rownum
>
10
这种条件的话话就要用嵌套语句,把
rownum
先生成,然后对他进行查询。
select
*
from
(selet
rownum
as
rn,t1.*
from
a
where
...)
where
rn
>10
一般代码中对结果集进行分页就是这么干的。
另外:rowid

rownum
虽都被称为伪列,但它们的存在方式是不一样的,rowid
可以说是物理存在的,表示记录在表空间中的唯一位置ID,在DB中唯一。只要记录没被搬动过,rowid是不变的。rowid
相对于表来说又像表中的一般列,所以以
rowid
为条件就不会有
rownum那些情况发生。
另外还要注意:rownum不能以任何基表的名称作为前缀。
oracle的rownum是在提取记录就已经生成,它先于排序操作,所以必须使用子查询先排序

ROWNUM值的分配是在查询的谓词解析之后,任何排序和聚合之前进行的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式