总结Oracle,MySql,SQLServer的分页查询总结

时间:2021-09-14 04:35:02

page:当前第几页
Size:每页显示的记录数

MySql(limit关键字)

select id,name from test limit参数1,参数2;
参数1,从第几条开始
参数2,返回多少条数据

JavaWeb中实现分页算法

select * from tableName limit (page-1)*size,size

SQLServer(top关键字)

几乎任何字段,我们都可以通过max(字段)或min(字段)来提取某个字段中的最大 或最小值,所以如果这个字段不重复,那么就可以利用这些不重复的字段的max或min作为分水岭,使其成为分页算法中分开每页的参照物。

select top size * from table1 where id>(select max (id) 
from (select top ((page-1)*size) id from table1 order by
id) as T) order by id

Oracle(row_number()或者rownum)

ORCALE数据库实现分页查询可以使用 row_number()函数或者使用rownum 虚列两种方法。

//第一 种:利用分析函数row_number() 方法
select * from(
select t.*,row_number() over (order by t1.id) rowno from TABLE1
)
where rowno between 21 and 40;

//第二种:直接 使用rownum 虚列
select * from
(select t.*,rownum as rowno from TABLE1 )
where rowno between 10 and 20

这两种方法比较,显然第二种方法比较好。因为不用order by语句,会提高检索数据的速度的,尤其数据量越大时,第二种方法快速检索数据越明显。
最后提醒大家:oracle中慎用带有order by的分页。尤其是在oracle10g中,会出现会引起混乱,即相同记录会出现在不同页中。