Oracle与DB2、MySQL取前10条记录的对比
2013-08-28 11:49
399 查看
Oralce的示例:
1. 最佳选择:利用分析函数
2. 使用rownum 虚列
注释:使用序列时不能基于整个记录集合来进行排序,假如指定了order by子句,排序的的是选出来的记录集的排序。
(1) 取前10条不同id记录,假如最后1条记录的ID依然有相同的,那么取出来。
(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条记录
Db2示例
(1) 取前10条不同id记录,假如最后1条记录的ID依然有相同的,那么全部取出来。
(2)取前10条记录,假如第10条记录的ID 还有相同的,那么全部取出来。
(3)取前10条记录
Mysql示例:
select id from mytable order by update_date desc limit 0,10
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; |
select tname,tabtype from ( select tname,tabtype,rownum rn from tab where rownum <= 150 ) where rn >= 100; |
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; |
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 * 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; |
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 |
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 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 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 mytable order by update_date desc limit 0,10
相关文章推荐
- Oracle与DB2、MySQL取前10条记录的对比
- Oracle与DB2、MySQL取前10条记录的对比
- Oracle与DB2、MySQL取前10笔记录的对比-1
- oracle,mysql,sqlserver,db2取前十条记录sql语句
- DB2 oralce mysql 取前十条记录对比
- 对比mysql oracle db2 的部分ddl语法
- SQL查询前10条记录(SqlServer/mysql/oracle/sybase)[语法分析]
- SQL查询前10条记录(SqlServer/mysql/oracle)[语法分析]
- SQL查询前10条记录(SqlServer/mysql/oracle)[语法分析] (转)
- SQL查询前10条记录(SqlServer/mysql/oracle/sybase)[语法分析] (转)
- SQL查询前10条记录(SqlServer/mysql/oracle)[语法分析]
- SQL查询前10条记录(SqlServer/mysql/oracle/sybase)[语法分析] (转)
- SQL查询前10条记录(SqlServer/mysql/oracle)语法分析
- SQL查询前10条记录(SqlServer/mysql/oracle)[语法分析] (转)
- DB2 oralce mysql 取前十条记录对比
- Oracle 查询前10条记录及分页查询(第五条到第十条记录)
- 总结Oracle,sqlserver,mysql中查询10-20条记录的写法
- 数据库Oracle与Mysql语法对比:选择结构
- oracle 数据库对象增长记录查询对比语句
- 数据库Oracle与Mysql语法对比:触发器