oracle 分页查询

来源:互联网 发布:微信群加人软件免费版 编辑:程序博客网 时间:2024/06/08 10:42

SQL> select * from scott.emp where rowid in(
              select rid from (
                  select rownum rn,rid from (
                      select rowid rid,empno from scott.emp order by empno desc)

                  where rownum<10)
              where rn > 6)

          order by empno desc;

请复制下面代码,可直接执行,和上面是一样的

select * from scott.emp where rowid in(select rid from (select rownum rn,rid from (select rowid rid,empno from scott.emp order by empno desc) where rownum<10) where rn > 6)  order by empno desc;

 

 

不懂的再看这个

oracle的分页是通过rownum实现的。

  rownum是一个伪列,是oracle系统自动为查询返回结果的每行分配的编号,第一行为1,第二行为2,以此类推。。。。

  一个oracle分页,至少要包含三层(除非不用order by,暂时可以用2层实现),模板为

  select temp2.* from(

  select rownum num,temp1.* from(

  SQL查询

  ) temp1 where rownum<=n1

  )temp2   where temp2.num>n2

  例如:值返回查询结果第11条到20条着10条的信息的SQL如下:

  select temp2.*

  from(

  select rownum num,temp1.*

  from(

  select tt.title_id,tt.name

  from t_title tt

  where tt.name like '%美%'

  order by tt.sort_seqs asc,tt.title_Id desc) temp1

  where rownum<=20

  )temp2

  where temp2.num>10

  分析:

  1.首先是一个正常的查询语句(包含order by)

  select tt.title_id,tt.name

  from t_title tt

  where tt.name like '%美%'

  order by tt.sort_seqs asc,tt.title_Id desc

  这个和正常的SQL语句没有任何的区别

  2.添加rownum字段,显示列数

  select rownum num,temp1.*

  from(

  select tt.title_id,tt.name

  from t_title tt

  where tt.name like '%美%'

  order by tt.sort_seqs asc,tt.title_Id desc) temp1

  where rownum<=20

  我们添加了rownum 显示字段,这时候就会会每行添加一个行数的编号;并且只返回20条之前的数据(包含20条)

  3.截取第10条到20条的数据,SQL就是:

        select temp2.*

  from(

  select rownum num,temp1.*

  from(

  select tt.title_id,tt.name

  from t_title tt

  where tt.name like '%美%'

  order by tt.sort_seqs asc,tt.title_Id desc) temp1

  where rownum<=20

  )temp2

  where temp2.num>10

 

 

 

原创粉丝点击