文章目录
SQL语言之伪列_分页查询
伪列
Oracle中的伪列就像一个表列(表中的列),但是它并没有存储在表中,伪列可以从表中查询,但不能插入、更新和删除它们的值
常用的伪列包括SYSDATE、ROWNUM、ROWID
- SYSDATE:目前的时间
- ROWID:数据详细的物理地址,通过ROWID可以快速的定位某行具体的数据的位置
- ROWNUM:查询返回的结果集中行的序列,通过查询语句查询出来ROWNUM的结果都是从1开始增加的,也就是说ROWNUM只能在[1, N]范围内取值,不能够从[M,N]的范围取值,必须从1开始
针对ROWNUM伪列只能从1开始取值而不能去区间的值,我们可以使用子查询建立临时表来解决这个问题。
参考代码如下:
//查询5~10行的数据
select *
from (
select e.*,rownum rn
from emp e
) temp
where rn between 5 and 10;
分页查询
如果查询的数据过于庞大,如果都在一个页面内显示是极其不合理的,所以需要实现分页显示数据
currentPage: 当前页cp
pageSize: 每一页显示的数量 ps
参考代码如下:
例如
查询第1页数据,每页显示3条数据:
currentPage = 1, pageSize = 3 此时 start = 1 end = 3
查询第2页数据,每页显示3条数据:
currentPage = 2, pageSize = 3 此时 start = 4 end = 6
查询第3页数据,每页显示3条数据:
currentPage = 3, pageSize = 3 此时 start = 7 end = 9
查询第cp页数据,每页显示ps条数据
start = (cp - 1) * ps + 1;
end = cp * ps;
CurrentPage = 2
pageSize = 10
Start = 11 end =20
所以动态分页查询的SQL语句应该这样写:
select *
from (
select e.*,rownum rn
from emp e
) temp
where rn between (cp - 1) * ps + 1 and cp * ps;
或者
select *
from (
select e.*,rownum rn
from emp e
where rownum <= cp * ps
) temp
where rn >= (cp - 1) * ps + 1;