mysql 取指定条数的记录

Db2 例子
Sql代码
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 

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 还有相同的,都要取出来。
Sql代码
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 

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 还有相同的,都要取出来。

Sql代码
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 

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条记录

Sql代码
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 

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. 最好还是利用分析函数
Sql代码
row_number() over ( partition by col1 order by col2 ) 

row_number() over ( partition by col1 order by col2 )比如想取出100-150条记录,按照tname排序

Sql代码
select tname,tabtype from (  
select tname,tabtype,row_number() over ( order by tname ) rn from tab  
)  
where rn between 100 and 150; 

select tname,tabtype from (
select tname,tabtype,row_number() over ( order by tname ) rn from tab
)
where rn between 100 and 150;

2. 直接使用rownum 虚列
Sql代码
select tname,tabtype from (  
select tname,tabtype,rownum rn from tab where rownum <= 150  
)  
where rn >= 100; 

select tname,tabtype from (
select tname,tabtype,rownum rn from tab where rownum <= 150
)
where rn >= 100;使用序列不能基于整个记录集合进行排序,如果指定了order by子句,排序的的是选出来的记录集的排序.

Sql代码
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; 

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;

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

Sql代码
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; 

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 还有相同的,都要取出来。

Sql代码
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; 

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条记录

Sql代码
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; 

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 例子

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

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

              select * from tablename limit [offset],(rows)
              注释:offset为偏移量
                        rows为要取出的记录条数
内容来自:http://nanshannan0106.iteye.com/blog/213252

你可能感兴趣的:(sql,mysql,Blog,db2)