SQL em Oracle > DML > Percurso em árvore > Filtragem de nós/ramos da árvore
Filtragem de nós/ramos da árvore

As cláusulas WHERE e CONNECT BY podem ser utilizadas para filtrar nós da árvore, evitando que sejam apresentados no output. Uma condição colocada na cláusula WHERE permite eliminar um nó. Uma condição na cláusula CONNECT BY permite eliminar todo um ramo.

No exemplo abaixo apenas a linha BLAKE é eliminada, aparecendo os seus 'filhos':

select level, deptno, empno, ename, job, sal
from emp
where ename!='BLAKE'
connect by prior empno=mgr
start with mgr is null;

LEVEL                  DEPTNO                 EMPNO                  ENAME      JOB       SAL                    
---------------------- ---------------------- ---------------------- ---------- --------- ---------------------- 
1                      10                     7839                   KING       PRESIDENT 5000                   
2                      20                     7566                   JONES      MANAGER   2975                   
3                      20                     7788                   SCOTT      ANALYST   3000                   
4                      20                     7876                   ADAMS      CLERK     1100                   
3                      20                     7902                   FORD       ANALYST   3000                   
4                      20                     7369                   SMITH      CLERK     800                    
3                      30                     7499                   ALLEN      SALESMAN  1600                   
3                      30                     7521                   WARD       SALESMAN  1250                   
3                      30                     7654                   MARTIN     SALESMAN  1250                   
3                      30                     7844                   TURNER     SALESMAN  1500                   
3                      30                     7900                   JAMES      CLERK     950                    
2                      10                     7782                   CLARK      MANAGER   2450                   
3                      10                     7934                   MILLER     CLERK     1300                   

13 rows selected

No exemplo seguinte todo o ramo de subordinados de 'BLAKE' é eliminado:

select level, deptno, empno, ename, job, sal
from emp
connect by (prior empno=mgr) and (ename!='BLAKE')
start with mgr is null;

LEVEL                  DEPTNO                 EMPNO                  ENAME      JOB       SAL                    
---------------------- ---------------------- ---------------------- ---------- --------- ---------------------- 
1                      10                     7839                   KING       PRESIDENT 5000                   
2                      20                     7566                   JONES      MANAGER   2975                   
3                      20                     7788                   SCOTT      ANALYST   3000                   
4                      20                     7876                   ADAMS      CLERK     1100                   
3                      20                     7902                   FORD       ANALYST   3000                   
4                      20                     7369                   SMITH      CLERK     800                    
2                      10                     7782                   CLARK      MANAGER   2450                   
3                      10                     7934                   MILLER     CLERK     1300                   

8 rows selected

bthome.gifTopo


Realizado por Turtle Learning ®. Última alteração em 2011-08-14