Database/ORACLE

ORACLE CONNECT BY LEVEL 사용

퐁스 2019. 3. 20. 18:05

계층구조쿼리를 공부하다보면 만나는 SQL문이 CONNECT BY LEVEL이다. 오늘 공부한김에 이해한 내용을 정리해보겠다.

보통은 PRIOR이랑 엮여서 쓰이는 경우가 많다 SCOTT 계정 기준으로

SELECT LEVEL, LPAD(' ', 4*(LEVEL-1)) || ename ename, empno, CONNECT_BY_ROOT empno ,mgr, job 
FROM emp
START WITH job='PRESIDENT'
CONNECT BY PRIOR empno=mgr;

KING부터 시작해서 결과 값을 보여준다.

따로 떼어서 LEVEL을 활용해 써보면 일반적인 FOR문이랑 비슷하다고 생각해도 될 것 같다.

SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 10;
SELECT LEVEL*0.1 FROM DUAL CONNECT BY LEVEL <= 10;
SELECT LEVEL*-1 FROM DUAL CONNECT BY LEVEL <= 10;
SELECT 11-LEVEL FROM DUAL CONNECT BY LEVEL <= 10;

이렇게 하면 LEVEL 값에 따라 결과가 다르게 나온다.

앞으로도 계속 만날텐데 잘 기억해둬야겠다.