DB2、oralce、mysql数据库取前十条记录代码

本文通过实例解析了SQL中使用rank(), dense_rank(), row_number()等分析函数实现排序与分页的方法,并提供了Oracle与MySQL的具体应用示例。

-

Db2 例子

 

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 * 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) as tt where case1<=10

 

 

case 1: 取前10条不同id记录,如果最后1条记录的ID 还有相同的,都要取出来。

 

select * from mynumber where id in(select distinct id from mynumber fetch first 10 rows only)

 

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) as 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) as tt where case1 between 5 and 10

 

 

case 2:取前10条记录,如果第10条记录的ID 还有相同的,都要取出来。

 

select * from mynumber where id in(select id from mynumber fetch first 10 rows only)

 

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) as 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) as tt where case2 between 5 and 10

 

case 3:取前10条记录

 

select id from mynumber fetch first 10 rows only

 

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) as 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) as tt where case3 between 5 and 10

 

 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;

 

cas1:  取前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;

 

case 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;

 

 

case 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;

 

Mysql 例子

 

 select id from mytable order by update_date desc limit 0,10

 

 

本文来自: IT知道网(http://www.itwis.com) 详细出处参考:http://www.itwis.com/html/database/base/20071230/778.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值