db2中的fetch first n rows only与 oracle中的rownum
来源:互联网 发布:网络信息安全攻防平台 编辑:程序博客网 时间:2024/06/06 13:16
在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中的实例:
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下了,都一样用
- db2中的fetch first n rows 与 oracle中的rownum
- db2中的fetch first n rows only与 oracle中的rownum
- db2中的fetch first n rows only与 oracle中的rownum
- oracle XE精简版不支持FETCH FIRST 5 ROWS ONLY语句
- oracle中rank(),dense_rank(), partition, over(),fetch n rows only用法
- db2 row_number() over( partition by col1 order by col2 ) 和关于fetch first n row only 的诡异
- Oracle中的rownum、order by与分页
- oracle中的rownum、order by与分页
- oracle中的rownum、order by与分页
- oracle中的rownum、order by与分页
- ORACLE中的rownum
- 解析ORACLE中的ROWNUM
- oracle中的rownum
- oracle中的rownum
- oracle 中的 rownum
- Oracle中的ROWNUM
- oracle中的rownum
- Oracle中的rownum、rowid
- ie6的position:fixed
- ios 字符串
- l连接JDBC的地址
- xml schema中的命名空间
- 别了,Google Reader
- db2中的fetch first n rows only与 oracle中的rownum
- 学习Android之用户界面基础
- 怎样压缩PDF文件?
- soap学习篇
- Delphi调用Java类(支持Java 6)
- Win32多线程设计之MFC的多线程
- CString到const char *的转换
- 面试随笔
- snoopy模拟登陆新浪微博