oracleの階層問い合わせではテーブルの木構造を意識した問い合わせを行なうことが出来ます。
言葉では伝えづらいので、まずはテストしてみましょう。

SQL> select * from t1;

        ID      OYAID
---------- ----------
         1
         2          1
         3          2
         4          3
         5          1
         6          5
         7          2
        20
        21         20
        22         21

10行が選択されました。


上記のようなIdとOyaIdで構成されたテーブルがあります。
ある行のIDと、ある行のOyaIDが一致する場合は親子関係を結ぶものとします。

SQL> select ID,OyaID,Level
  2  from t1
  3  start with OyaID is null
  4  connect by prior ID = OyaID;

        ID      OYAID      LEVEL
---------- ---------- ----------
         1                     1
         2          1          2
         3          2          3
         4          3          4
         7          2          3
         5          1          2
         6          5          3
        20                     1
        21         20          2
        22         21          3

10行が選択されました。


「start with OyaID is null」よりOyaIDがnullの行は親のいない行、木構造の根っこの部分、一番てっぺんの行になります。
「connect by prior ID = OyaID」より親のIDと子のOyaIDが一致する場合は親子関係を結ぶものとします。
さらにlevelというのは疑似列で、木構造の何段目にいるかを表します。
例えば一番てっぺんの親はlevel=1、その親の子はlevel=2、さらにその親の子の子はlevel=3と言ったふうになります。