Oracle SQl语句使用rownum分页 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    ROWNUM:

    说明:rownum是一个伪字段,标示查询字段的序号;

    使用:select rownum 序号 from table

    注意

    一、rownum 使用 '>' 号的问题

    select * from emp where rownum>3、

    查询不到结果

    原因:rownum是在使用select查询的时候,自动生成的一串顺序号,

Oracle SQl语句使用rownum分页

    在每返回一条数据结果的时候,rownum就自动加一

    当select 一条数据 rownum 为 1 不>3 记录被筛去

    而下一条 数据 rownum 又是 1.。。。。。。。

    解决:加一层嵌套

    二、rownum 与 order by 同时使用会出现问题

    rownum 是不支持order by 排序的。因为rownum是在排序之前取值的。

    "在oracle中如果rownum与order by同在,是先rownum,然后再order by "

    oracle手册上说的:“即使select语句中一条简单的order by都可能会搞乱ROWNUM(因为ROWNUM是排序前分配给各行的)

    如图所示:(RN 列顺序错误

    解决方式

    1、直接嵌套:(增加了两次查询,被嵌套的查询结果相当于视图,view中已经有rownum字段 所以可以使用 > 号)

    select t2.* from(--解决>号问题

    select t1.*,ROWNUM rn from (--解决order by 的影响

    select

    k.bmxh,

    k.byxxdm,

    z.zgdm,

    z.dqdm,

    zd.zgmc,

    zd.fz

    from zgjf z

    left join ks k on z.bmxh = k.bmxh

    left join zgdm zd on z.zgdm = zd.zgdm

    order by bmxh asc, z.zgdm asc

    )t1

    )t2where rn > 2 and rn <10

    2、使用:row_number() over(order by COLUMN_NAME) 改变顺序,先执行了括号中的order by

    select z.* ,row_number() over ( order by z.bmxh ) rn from zgjf z where rownum <10 and rownum >5

最新文章