博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle分页sql(rownum伪列使用)
阅读量:6093 次
发布时间:2019-06-20

本文共 895 字,大约阅读时间需要 2 分钟。

首先看一下ROWNUM的定义:是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。注意总是从1开始,先查出结果集,然后从1开始编号。

举例来说,我有个user表,里面有字段user_id,按其排序,一共有60条记录,我要取出11到20这10条记录。

看下sql:

select *   from (select rownum r, u.user_id, u.user_name           from user u          where rownum < 21          order by u.user_id desc)  where r > 10;

 首先,我们知道rownum对于 Oracle问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<、<=、!=),并非说用>,& gt;=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,或者异常结果。

select *   from user u  where rownum > 10  order by u.user_id desc

 直接使用rownum>10查询结果为空。因为第一条不满足去掉的话,第二条的ROWNUM又成了1,所以永远没有满足条件的记录。

只能通过嵌套查询的方式先把rownum查出来,然后对它进行查询即可。

最后一定切记rownum = 1 这条记录不可抛弃,它在结果集中是不可或缺的。

另外:rowid 与 rownum 虽都被称为伪列,但它们的存在方式是不一样的,rowid 可以说是物理存在的,表示记录在表空间中的唯一位置ID,在DB中唯一。只要记录没被搬动过,rowid是不变的。rowid 相对于表来说又像表中的一般列,所以以 rowid 为条件就不会有 rownum那些情况发生。

转载于:https://www.cnblogs.com/hexiweb/archive/2012/05/24/2516170.html

你可能感兴趣的文章
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
CCF201612-1 中间数(解法二)(100分)
查看>>
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
PHP下使用Redis消息队列发布微博
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
执行存储过程返回游标集合转换成List
查看>>
(SQL)比较一个集合是否在另一个集合里存在的方法
查看>>
8. 多态——编译时类型&运行时类型
查看>>
逻辑运算
查看>>
Load Balanced 2
查看>>
Angular : 响应式编程, 组件间通信, 表单
查看>>
Python 软件开发目录规范
查看>>