db2中的fetch first n rows与oracle中的rownum -电脑资料

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

    db2中的fetch first n rows与oracle中的rownum

    在db2中如果想获取前n行,只要加上fetch first n rows only 就可以了,但在oracle中没有fetch,网上很多人说可以用oracle的rownum<=n来替代db2的fetch first n rows only,但这样的替换,在对结果集需要进行order by之后再获取前n行时,是不对的,

db2中的fetch first n rows与oracle中的rownum

。根据我的试验,rownum的顺序好像是和rowid相对应的,而rowid的顺序是根据插入表中的数据的顺序有关(不知道oracle真正的实现机制是不是这样,有时间找本oracle的书系统研究一下)。看下面oracle中的实例: 

    SQL>select rownum,id,age,name from loaddata;

    ROWNUM ID  AGE NAME

    ------- ------ --- ------

    1 200001 22 AAA

    2 200002 22 BBB

    3 200003 22 CCC

    4 200004 22 DDD

    5 200005 22 EEE

    6 200006 22 AAA

    SQL>select rownum ,id,age,name from loaddata order by name;

    ROWNUM ID  AGE NAME

    ------- ------ --- ------

    1 200001 22 AAA

    6 200006 22 AAA

    2 200002 22 BBB

    3 200003 22 CCC

    4 200004 22 DDD

    5 200005 22 EEE

    所以,要是想排序后在取前几行,可以用子查询select rownum ,id,age,name from (select * from loaddata order by name);

    但我觉得既然要使用子查询,与其使用oracle的特定函数rownum,倒还不如使用标准sql的函数row_number() over (),

电脑资料

db2中的fetch first n rows与oracle中的rownum》(https://www.unjs.com)。可以这样写select id,age,name from (select row_number() over (order by name) as row_number,id,age,name from loaddata ) where row_number
最新文章