目标
分页查询显示交易商信息:显示交易商ID,交易商姓名,身份证号
每页显示4条记录
显示第二页的交易商(排序的第5条到第8条数据)
按照交易商ID降序排序
解决方案
因为rownum只能使用<,<=,不能使用>,>=,所以这里只能使用嵌套子查询的方式来实现分页查询
select e2.r1, e2.firmid, e2.name, e2.certificateno
from
(select rownum r1,e1.firmid, e1.name, e1.certificateno
from
(select m.firmid, m.name, m.certificateno
from m_firm m
order by m.firmid desc) e1
where rownum <= 8) e2
where e2.r1 >= 5
在使用时,将上面的“5”换成开始条数,“8”换成结束条数
分析
1.首先将交易商表中的数据按交易商ID降序排序
select m.firmid, m.name, m.certificateno
from m_firm m
order by m.firmid desc
2.将第1步查出来的数据当成一张表,取别名为 e1,写在子查询中,然后查询出e1中的字段,同时显式地查询出行号rownum,并取上别名 r1,取出前8条数据(rownum<=8),由于rownum只能使用<,<=,不能使用>,>=,所以这里只能先取出前面8条数据
select rownum r1,e1.firmid, e1.name, e1.certificateno
from
(select m.firmid, m.name, m.certificateno
from m_firm m
order by m.firmid desc) e1
where rownum <= 8
3.将第2步查询出来的数据再当成一张新表,取别名为e2,这时,e2在查询时给用到的伪列起了个别名r1,那么,就可以把这个r1当成是一个普通的列来使用,那么就可以使用>,>=来操作了。查询出e2表中,r1>=5的数据
select e2.r1, e2.firmid, e2.name, e2.certificateno
from
(select rownum r1,e1.firmid, e1.name, e1.certificateno
from
(select m.firmid, m.name, m.certificateno
from m_firm m
order by m.firmid desc) e1
where rownum <= 8) e2
where e2.r1 >= 5