oracle分页小谈

来源:未知 责任编辑:责任编辑 发表时间:2014-01-25 11:37 点击:

今天做项目时要实现分页功能,以前只在mysql上弄过,oracle倒没试过,但知道有这样一个rownum这个东西。

 但这个东西也不是那么容易用的,还是有蛮多地方要注意的。它不是物理上存在的一列,而是oracle自己在结果集中进行添加的。

 首先我们来看一下我们的表结构先:

 我们新建一个表:

 \

  也就一个字段ID而已,这方便我们直接地看到结果。

 我们先随便插入几条数据:

 先弄进去5条吧。

 \

 我们直接来一个:

Sql代码 
select rownum,id from test; 

select rownum,id from test;  我们看到结果:

 \

 很高兴吧,都是一模一样的,ronwum和ID是一样的,方便我们看。

 

 但结果看到的结果可能就会让你郁闷啦。

 

 继续下来,我们删除几条数据再插入几条:

 \

 看到结果,我们是删除了后面两条,4,5这两条记录,而插入了8,9这两条记录。我们再来执行查询:

Sql代码 
select rownum,id from test; 

select rownum,id from test; 

\

 我们看到ID为8,9的已经取代了之前的4,5得到了rownum为4,5。这个说明了什么,说明了rownum并不是物理存在的,如果是物理存在的那么它肯定会随着4,5的删除而把rownum的4,5都删除了,但它并没有,而是把新插入的记录的rownum作为此值,这说明rownum肯定只是一个逻辑上的列,它有一个专门的名称——伪列。

 

 下面我们继续插入数据,方便做下面的实验:

 \

 
 如果我们需要取得前5条记录,我们会怎么做呢?我们看到前面的rownum是根据我们查出来的结果来进行赋值的,那么我们就明白了,也许可以这样:

Sql代码 
select rownum,id from test where rownum <= 5 order by id; 

select rownum,id from test where rownum <= 5 order by id;  但很杯具的是,我们错了,看看结果:

 \

 为什么错呢?

  原因就是rownum会在我们查询出来结果还没排序前就进行编号。由于是这个原因,我们只要加个字查询就OK啦。

Sql代码 
select rownum,id from (select * from test order by id) where rownum <= 5; 

select rownum,id from (select * from test order by id) where rownum <= 5;  我们看看结果: 

\

 现在没问题了,已经按照rownum来排序了,也就是实现了我们的要求,查出前5个。

 

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Table函数使用简介
  • Oracle数据库Constraint约束的常用操作及异常处理
  • Bulk Collect性能分析(zz)
  • export/import的使用
  • OCP043第十五讲 Database Security
  • ORACLE10gr2数据导入MySQL方案
  • oracle 让sys用户可以使用isqlplus
  • 在oracle数据库下使用iSQL*Plus DBA访问数据库
  • Oracle行列转换小结
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1