一、数据准备(为了方便查询行,id用自然数表示)

select * from test ;

ID	PARENT	CHILD
1  a  ab
2  a  ac
3  b  bc
4  ab  abc
5  abc  abcd
6	ac	acd
7	bc	bcd

二、oracle中的分页

--可以直接查询伪类rownum
select rownum,a.* from test a
1	1	a	ab
2	2	a	ac
3	3	b	bc
4	4	ab	abc
5	5	abc	abcd
6	6	ac	acd
7	7	bc	bcd

--直接查询第一伪列,是可以直接查询出来数据的!!!!
 select rownum,a.* from test a
  where rownum = 1;
1	1	a	ab
 
--当查询第二伪列,则无数据,看来oracle只能接受第一   @_@
  select rownum,a.* from test a
  where rownum = 2;
 null 
 
--把上述伪列查询,当做表去查询,发现直接用伪列字段rownum还是用不了!!
 select * from (
 select rownum,a.* from test a
 ) where rownum = 2;
 null

--只能把伪列价格别名,明显好用了(不是自己的‘孩子’,除非‘改名’才是自己的~)
 select * from (
 select rownum r,a.* from test a
 ) where r = 2;
2	2	a	ac

--变成自己的数据,可以肆无忌惮的使用各种限制行了
 select * from (
 select rownum r,a.* from test a
 ) where r > 2 and r<5;
3	3	b	bc
4	4	ab	abc

三、pgsql中的分页

--pg 中可以直接查询出一行,不需要伪列才参与
select * from test limit 1
1	a	ab

--对于其他列也比较友好,均可出结果
select * from test limit 2
1	a	ab
2	a	ac

--查询具体某行,直接价格offset(开端的意思,个人理解是‘定位’的意思,
--从哪里开始,表格中也有该函数,意思一样)限制即可,注意第一行的offset是0,
select * from test limit 2 offset 1;
2	a	ac
3	b	bc

四、小结

       oracle第一行可以直接使用,其他行只能用添加伪列的表,并且rownum要有别名才可以使用分页。pgsql中则用关键字limit和offset限制即可!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐