当前位置: 网学 > 编程文档 > ORACLE > 正文

Oracle与DB2、MySQL取前10条记录的对比

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/19
下载{$ArticleTitle}原创论文样式

Oralce的示例:

 

1. 最佳选择:利用分析函数

 

row_number() over ( partition by col1 order by col2 )比如想取出100-150条记录,按照tname排序select tname,tabtype from (select tname,tabtype,row_number() over ( order by tname ) rn from tab)where rn between 100 and 150;

 

 

2. 使用rownum 虚列

 

select tname,tabtype from (select tname,tabtype,rownum rn from tab where rownum <= 150)where rn >= 100;

 

注释:使用序列时不能基于整个记录集合来进行排序,假如指定了order by子句,排序的的是选出来的记录集的排序。

 

 

create table mynumber(id int,name varchar(10));insert into mynumber values(1,''no1'');insert into mynumber values(2,''no2'');insert into mynumber values(3,''no3'');insert into mynumber values(4,''no4'');insert into mynumber values(5,''no5'');insert into mynumber values(5,''no6'');insert into mynumber values(6,''no7'');insert into mynumber values(7,''no8'');insert into mynumber values(8,''no9'');insert into mynumber values(9,''no10'');insert into mynumber values(9,''no11'');insert into mynumber values(9,''no12'');insert into mynumber values(10,''no13'');insert into mynumber values(10,''no14'');insert into mynumber values(10,''no15'');insert into mynumber values(11,''no16'');insert into mynumber values(12,''no17'');insert into mynumber values(13,''no18'');

 

 

select id,name,RANK() over ( order by id ) case1,DENSE_RANK() over ( order by id ) case2,row_number() over ( order by id ) case3 from mynumber;

 

(1) 取前10条不同id记录,假如最后1条记录的ID依然有相同的,那么取出来。

 

select id,name from mynumber where id in (select id from (select distinct id from mynumber) tt where rownum<=10);select * from (select id,name,RANK() over ( order by id ) case1,DENSE_RANK() over ( order by id ) case2,row_number() over ( order by id ) case3 from mynumber)tt where case1<=10;select * from (select id,name,RANK() over ( order by id ) case1,DENSE_RANK() over ( order by id ) case2,row_number() over ( order by id ) case3 from mynumber) tt where case1 between 5 and 10;

 

 

 

(2)取前10条记录,假如第10条记录的ID 还有相同的,那么取出来。

 

select * from mynumber where id in(select id from mynumber where rownum <=10);select * from (select id,name,RANK() over ( order by id ) case1,DENSE_RANK() over ( order by id ) case2,row_number() over ( order by id ) case3 from mynumber) tt where case2<=10;select * from (select id,name,RANK() over ( order by id ) case1,DENSE_RANK() over ( order by id ) case2,row_number() over ( order by id ) case3 from mynumber) tt where case2 between 5 and 10;

 

 

 

 

(3)取前10条记录

 

select id,name from mynumber where rownum <=10;select id,name from (select id,name,rownum rn from mynumber where rownum <= 10 ) where rn >= 5;select * from (select id,name,RANK() over ( order by id ) case1,DENSE_RANK() over ( order by id ) case2,row_number() over ( order by id ) case3 from mynumber) tt where case3<=10;select * from (select id,name,RANK() over ( order by id ) case1,DENSE_RANK() over ( order by id ) case2,row_number() over ( order by id ) case3 from mynumber) tt where case3 between 5 and 10;

&

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号