您的位置:首页 > 数据库

SQL分页

2015-11-02 11:16 295 查看
想要查询Student表。在表格中显示为一行有M条记录,现要显示第N页的记录。如此实现。

如果此表有递增的ID我们当然可以使用id进行筛选查询,如下:

select *
from Student
where Id between M*(N-1)+1 and N*M


但是可能由于种种原因,id并不是连续的数值。这样查询出来的分页数据,一定会不正确。那怎么办呢。

此时,就必须要用row_number() over(order by 字段)进行排序了

这时候,表中就有一列按顺序排序的id值了。

想要进行分页显示就必须加上where条件,但我们都知道在查询的sql中,Sql的执行顺序是先执行FROM,再是WHERE,再是GROUP BY,ORDER BY……,最后才是SELECT的查询字段,对于这样的执行顺序,显示,现在在这样Sql上,加where条件,不可能达到上面筛选的效果。那么,问题来了。

其实很简单。只有我们将上面的查询做为结果,再在外面进行一行筛选查询即可。即,使用派生表分页。

select *
from(
select row_number() over(order by id) id_num,*
from Student)
where id_num between M*(N-1)+1 and N*M


同进,问题也来了,不能每次要进行分页查询的时候,都对整个表进行相同的查询,这样明显很繁琐。

这时候,我们就可以使用视图了。在内部的查询做为一个视图,以后每次再进行分页的时候,就要对视图进行操作就OK了

create view Student_ByPage
as
select row_num() over (order by id) as id_num,*
from Student


以后再次需要分页的时候,只有对视图进行操作即可。

select  *
from Student_ByPage
where id_num between M*(N-1)+1 and N*M
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: