[오늘쿼리](CONNECT BY)

놀아·2022년 4월 10일
0
SELECT RPAD(' ',LEVEL*3) || ENAME AS EMPLOYEE, LEVEL, SAL, JOB
	FROM EMP
    START WITH ENAME = 'KING'
    CONNECT BY PRIOR EMPNO = MGR;

결과

EMPLOYEE | LEVEL | SAL | JOB
KING | 1 | 5000 | PRESIDENT
JONES | 2 | 2975 | MANAGER
SCOTT | 3 | 3000 | ANALYST
ADAMS | 4 | 1100 | CLERK
FORD | 3 | 3000 | ANALYST
SMITH | 4 | 800 | CLERK
BLAKE | 2 | 2850 | MANAGER
ALLEN | 3 | 1600 |SALESMAN

계층형 질의문에서 쓰이는 용어

  1. 노드(node) : 표시된 항목
  2. 레벨(level) : 트리(tree) 구조에서 각각의 계층
  3. 루트(root) : 트리(tree) 구조에서 최상위에 있는 노드
  4. 부모(parent) : 트리(tree) 구조에서 상위에 있는 노드
  5. 자식(child) : 트리(tree) 구조에서 하위에 있는 노드
  • 키워드 CONNECT BY 와 START WITH 절을 사용하면 PSEUDO COLUMN 인 LEVEL 을 출력가능
  • CONNECT BY절은 부모 노드와 자식 노드들 간의 관계를 지정
  • PRIOR을 가운데로 두고 왼쪽 부모노드 오른쪽 자식 노드 컬럼

BLAKE 의 직속 부하들은 출력 되지 않도록

SELECT RPAD(' ', LEVEL*3) || ENAME AS EMPLOYEE, LEVEL, SAL, JOB
	FROM EMP
    START WITH ENAME = 'KING'
    CONNECT BY PRIOR EMPNO = MGR AND ENAME != 'BLAKE';

서열순서를 유지하면서 월금이 높은 사워부터 출력되게

  • 서열 순서를 깨트리지 않으면서 출력
SELECT RPAD(' ', LEVEL*3) || ENAME AS EMPLOYEE, LEVEL, SAL, JOB
	FROM EMP
    START WITH ENAME = 'KING'
    CONNECT BY PRIOR EMPNO = MGR 
    ORDER SIBLINGS BY SAL DESC;

서열 순서를 가로로 출력

SELECT ENAME, SYS_CONNECT_BY_PATH(ENAME,'/') AS PATH
	FROM EMP
    START WITH ENAME = 'KING'
    CONNECT BY PRIOR EMPNO = MGR 
profile
머리가 나쁘기 때문에 메모와 정리를 한뒤에 찾아보기

0개의 댓글