问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在oracle中ROWNUM是什么东西?

发布网友 发布时间:2022-04-20 14:02

我来回答

1个回答

热心网友 时间:2023-06-26 18:27

  ORACLE 中ROWNUM用法总结!
  对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<、<=、!=),并非说用>,& gt;=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样,下面以例子说明
  假设某个表 t1(c1) 有 20 条记录
  如果用 select rownum,c1 from t1 where rownum < 10, 只要是用小于号,查出来的结果很容易地与一般理解在概念上能达成一致,应该不会有任何疑问的。
  可如果用 select rownum,c1 from t1 where rownum > 10 (如果写下这样的查询语句,这时候在您的头脑中应该是想得到表中后面10条记录),你就会发现,显示出来的结果要让您失望了,也许您还会怀疑是不谁删了一 些记录,然后查看记录数,仍然是 20 条啊?那问题是出在哪呢?
  先好好理解 rownum 的意义吧。因为ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值。所以您没办法期望得到下面的结果集:
  11 aaaaaaaa
  12 bbbbbbb
  13 ccccccc
  .................
  rownum >10 没有记录,因为第一条不满足去掉的话,第二条的ROWNUM又成了1,所以永远没有满足条件的记录。或者可以这样理解:
  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不能以任何基表的名称作为前缀。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
发摅解释 摅的组词有哪些 摅字能组哪些词 检测电脑配置的软件电脑硬件检测权威软件有哪几个 查看电脑参数的软件什么软件可以全面检测显示出电脑硬件参数数据_百度... 有没有可以查自己电脑配置的软件啊??? 芯片程序解密哪家好 ...文章怎么突然间阅读量开始大减,从几百掉到个位数。 百家号怎么才个位数播放量?个位数播放量怎么算? 保本收益投资合法吗 oracle 10g 在查询结果列中添加rownum列,查询出的... 在PLSQL中怎么能取到表中按ID降序排列的前十条记录... oracle rownum的问题 如何在一个select 语句中显示行的序号 oracle 中rownum怎么用 select rownum ,id from T where rownum = 2 oralc... 在oracle中ROWNUM是什么东西?拜托各位大神 SQL中ROWNUM是做什么的?有什么作用? 索尼哪款单反相机性价比比较高? 索尼的单反相机到底好不好 索尼a500相机是属于单反还是微单?为什么我在京东... sony&nbsp;nex5比专业单反相机差在哪里呢?求高手解释 索尼DSC-HX30 是单反相机吗 索尼单反相机哪款好 三款新手入门级相机 索尼有哪些型号的单反相机 索尼a65是单反相机还是单电相机 索尼入门级单反相机哪个型号好,索尼入门级单反相机 索尼DSC-F717是单反吗? Sony有没有出过单反相机 索尼、三星有没有单反相机? oracle和sql server取第一条记录的区别以及rownum详解 orcale rownum 分页查询的数据顺路混乱 oracle rownum的疑问 为什么oracle中rownum只能小于,不能大于 oracle中rownum和rowid的区别 oracle 中的rownum 是什么时候产生的? ORACLE如何select相同的字段并添加分组序号 sqlsever 里有没有rownum这样的方法 sql 查询指定行 rownum的理解 oracle中rownum的用法 冰箱上层不制冷是什么原因容声电脑直冷三门冰箱上... 冰箱上面不制冷 下面制冷怎么回事? 容声冰箱上面不制冷下面正常? wifi已连接(无法上网)是欠费了吗 已连接(不可上网)手机没有欠费,重启无线,路由器... 手机网络已连接但无法访问互联网怎么解决 我的手机无法使用无线网络是怎么回事,用的是家里... 手机网络已连接但无法访问 手机已连接但无法访问互联网是怎么回事?