connect_by_root and connect_by_isleaf

create table T_TREE ( FATHERID VARCHAR2(20), CHILDID VARCHAR2(20) );

insert into T_TREE (FATHERID, CHILDID) values ('2', '3');

insert into T_TREE (FATHERID, CHILDID) values ('10', '9');

insert into T_TREE (FATHERID, CHILDID) values ('1', '2');

insert into T_TREE (FATHERID, CHILDID) values ('3', '4');

insert into T_TREE (FATHERID, CHILDID) values ('8', '5');

insert into T_TREE (FATHERID, CHILDID) values ('9', '8');

commit;

--注意:下面所述内容仅在oracle10g中才支持。

---connect_by_root ,找出每个节点的根节点

SELECT MIN(root), childid
FROM (SELECT connect_by_root fatherid AS root, fatherid, childid
      FROM t_tree
      CONNECT BY fatherid = PRIOR childid) b
GROUP BY childid
ORDER BY childid;
--connect_By_isleaf,找到所有的叶子节点
SELECT DISTINCT childid
FROM (SELECT connect_by_isleaf leaf, childid, fatherid
      FROM t_tree
      CONNECT BY fatherid = PRIOR childid) b
WHERE b.leaf = 1;
--level 是connect by 字句中的一个伪列
SELECT 'dadaf', LEVEL FROM dual CONNECT BY LEVEL < 10;

你可能感兴趣的:(tree,table,insert,oracle10g)