SQL语言之伪列_分页查询

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值