虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > DB2数据库 > db2中的fetch first n rows与oracle中的rownum

db2中的fetch first n rows与oracle中的rownum
类别:DB2数据库   作者:码皇   来源:milife2012的专栏     点击:

db2中的fetch first n rows与oracle中的rownum 在db2中如果想获取前n行,只要加上fetch first n rows only 就可以了,但在oracle中没有fetch,网上很多人说可以用oracle的rownum<=n来替代db2的fetch f
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行时,是不对的。根据我的试验,rownum的顺序好像是和rowid相对应的,而rowid的顺序是根据插入表中的数据的顺序有关(不知道oracle真正的实现机制是不是这样,有时间找本oracle的书系统研究一下)。看下面oracle中的实例:  www.2cto.com   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 ()。可以这样写select id,age,name from (select row_number() over (order by name) as row_number,id,age,name from loaddata ) where row_number<n; 这样的话就不用考虑是在db2还是oracle下了,都一样用
相关热词搜索: fetch first rows
上一篇:DB2建立存储过程
下一篇:db2备份表的sql