Orcal和DB2中分页函数的含义以及如何在MySql中实现----------Orcal与MySql常见函数异同
提示:
在Oracle中实现分页的方法大致分为两种,用ROWNUM
关键字和用通常使用row_number() over (order by xxx ) RN......RN where RN between start and end;
来实现分页,下面来详细介绍一下第二种分页以及如何在MySql中的实现。
函数讲解:(对于排序和增加行序号参考上一篇文章,本文粗略带过,主要讲分页)
row_number() over (order by xxx ) RN......RN where RN between start and end;
函数逻辑为:查询表数据,对结果集进行排序并且增加行序号,查询行序号为start到end之间的数据。
案例讲解:
SQL含义:
查询表test_row_number_over根据 salary排序后的第5-8条数据。
也可以理解为查询结果集的第2页数据,每页有4条数据。
select * from
(select p.*,row_number() over (order by p.salary ) RN from
test_row_number_over p)
where RN between 5 and 8;
此处需要计算明白start和end与当前页和每页数据量的关系。
pagesize:每页行数,pagenum:当前第几页
start=(pagesize*(pagenum-1))+1;
end=pagesize*pagenum
SQL执行结果:
那么在改造过程中如何在MySql中实现:
简单,使用MySql的limit不知有多爽。
Sql逻辑为:查询表数据,对结果集进行排序并且增加行序号,查询行序号为start到end之间的数据。
SQL含义:
查询表test_row_number_over根据 salary排序后的第5-8条数据。
也可以理解为查询结果集的第2页数据,每页有4条数据。
select t.* from(
(SELECT a.*,@rank:=@rank + 1 AS rn FROM
(SELECT * FROM
test_row_number_over
ORDER BY salary ) a, (SELECT @rank:= 0) b) t) limit 4,4
此处需要计算明白pagesize和pagenum与当前页和每页数据量的关系。
pagesize:每页行数,pagenum:当前第几页
start=pagesize*(pagenum-1);
end=pagesize;
SQL执行结果:
补充:
需要注意MySql中派生表都需要起别名。
建表语句见上一篇文章。