一、数据准备(为了方便查询行,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限制即可!