基本语法
- start with :设置起点,省略后默认以全部行为起点。
- connect by [condition] :与一般的条件一样作用于当前列,但是在满足条件后,会以全部列作为下一层级递归(没有其他条件的话)。
- prior : 表示上一层级的标识符。经常用来对下一层级的数据进行限制。不可以接伪列。
- level :伪列,表示当前深度。
- connect_by_root() :显示根节点列。经常用来分组。
- connect_by_isleaf :1是叶子节点,0不是叶子节点。在制作树状表格时必用关键字。
- sys_connect_by_path() :将递归过程中的列进行拼接。
- nocycle , connect_by_iscycle : 在有循环结构的查询中使用。
- siblings : 保留树状结构,对兄弟节点进行排序
示例测试
简单查询
SQL> select t.empno,t.mgr,t.deptno ,level
2 from emp t
3 connect by prior t.empno=t.mgr
4 order by level,t.mgr,t.deptno
SQL> /
加上start with条件
SQL> select t.empno,t.mgr,t.deptno ,level
2 from emp t
3 start with t.mgr=7839
4 connect by prior t.empno=t.mgr
5 order by level,t.mgr,t.deptno
SQL> /
加了 start with t.mgr=7839
条件后,数据不一样的原因是:
不加条件前默认是所有行为第一行,所以当父节点未出现过时,level均为1;
而加了条件后,只能以 t.mgr=7839 为起始行,而父级又只能是前面出现过的,所以查出来的数据量变少。
显示根节点,叶子节点
如果需要显示根节点就需要加上connect_by_root
select t.empno,t.mgr,t.deptno ,level,
connect_by_root(t.empno) 根节点,connect_by_isleaf 叶子节点,
sys_connect_by_path(t.empno,'/') 拼接列
from emp t
start with t.mgr=7839
connect by prior t.empno=t.mgr
order by level,t.mgr,t.deptno
/