oracle中分页的知识

一:前言

      自从出来实习后,基本上都没有按下心来总结下自己学的知识点,刚刚好现在快要国庆了,没有到深圳出差,在公司呆了三天,可以说是在公司打了三天的酱油啊,所以前两天都是在看些正则的文档,并且写了下总结(等到要写的时候才觉得好像也没什么要写的啊),所以还是一点一点的写吧,因为五月份的实习知识点自己也做了总结,但是一直都没有具体分开加载到博客园,我自己还是觉得好记性不如烂笔头啊。

 

二:oracle的rownum

  (1)在我刚刚出来时候觉得分页很难搞,现在也学了这么久,但是我自己觉得还是有点难度,可能是自己没有偶真的去理解的吧,对于rownum,刚刚开始用的是时候就是提取一定范围的数据,也可以用between····and来做,下面都会进行具体说一下。

 

  (2)rownum

    对于oracle来说,我们查询一条数据,条件是rownum小于10

select id,bh,xm,xb from t_table where rownum<10

这条语句是可以查询到数据的。

但是如果你的条件是查询的条件是rownum>10;如果直接写如下

select id,bh,xm,xb from t_table where rownum>10

这条sql语句是查询不到数据的。

所以我上网查了下,都说的是oracle支持rownum<m(m为大于1正整数)即是该条件是成立的,而对于rownum>m(m为正整数)来说是不支持的,即是该条件是不成立的,所以就没有数据。如果要查询大于多少多少,必须要进行子查询才行,下面具体举列子说说。

我现在要查询的10<rownum<100的数据,那么我们一步步的写如下:

第一步:查询rownum小于100的数据

select id,bh,xm,xb from t_table where rownum<100

下一步我们就是想查询大于10-的数据,如果你这样写那么就不会查询到数据

select rownum, id,bh,xm,xb from (select id,bh,xm,xb from t_table where rownum <100) where rownum>10

有可能不看到网上说需要给rownum命个别名如下:

select rownum rn, id,bh,xm,xb from (select id,bh,xm,xb from t_table where rownum <100) where rn>10

这样的话会报错,“rn标识符无效”,是由于查询的条件必须是表中的数据,用别名的话是不行的。

比如:

 select a.id as gg from t-table a where gg =1;

本条sql也是会报错的,因为where后面的条件必须是数据库中有的字段名或者是子查询出来的数据中包含的字段

在写句正确的如下

select a.id  from t_table a where id=1;

select bh from (select a.id  as gg ,a.bh from t_xx a)  where gg =1;

所以那么这里就应该懂了该如何写

还有一点要注意:就是rownum必须要用别名,如果不用的话查询不到数据,因为rownum不是某个表的列,不用别名的话就不知道是子查询中的还是主查询中的列了

select  id,bh,xm,xb fromselect rownum , id,bh,xm,xb from (select id,bh,xm,xb from t_table where rownum <100) )) where rownum>10

所以最终的查询语句应该是这样的:

select  id,bh,xm,xb fromselect rownum rn , id,bh,xm,xb from (select id,bh,xm,xb from t_table where rownum <100) )) where rn>10

三:总结

  算是写完了,以后自己想不明白时就可以多看看了。其实有时候静下心来时想想一些自己以前想不通的地方还是有好处的。这里的记载主要是提醒自己在写子查询语句时要注意字段的用于的范围。谨记谨记!!!

 

posted @ 2014-09-30 16:05  郁闷的耗子  阅读(324)  评论(0编辑  收藏  举报