Start with...Connect By
CREATE TABLE TBL_TEST(ID NUMBER,NAME VARCHAR2(100 BYTE),PID NUMBER DEFAULT 0);
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');
SELECT * FROM TBL_TESTstart WITH id=1connect BY prior id = pidORDER BY pid
SELECT * FROM TBL_TESTstart WITH id=5connect BY prior pid = idORDER BY id