본문 바로가기
Data Engineering/SQL

[Oracle] CONNECT BY LEVEL: 계층적인 SQL, 쿼리에서의 반복문

by jangThang 2023. 3. 27.
반응형

 START WITH, CONNECT BY 문이 쓰이는 계층적 쿼리가 있습니다. 이는 쉽게 이해하면 SQL에서의 반복문이라고 생각하시면 됩니다. 이에 대해 알아보겠습니다.

 

[ Contents ]

     

     

    1. CONNECT BY LEVEL

    for i in range(1, 10):
    	print(i)

     위와 같은 반복문을 쿼리로 짜려면 어떻게 해야할까요?

     SQL은 주로 테이블을 조인하고 값을 조회하는 용도로 쓰이기 때문에, 반복문이 딱히 필요하진 않습니다. 하지만, 특정 주기의 날짜 계산이나 문구 반복, 계층적 데이터 추출에는 필요합니다.

     이번 시간에는 복잡한 계층적 데이터 추출은 다루지 않고, 단순히 반복문의 기능이 필요한 경우만 다뤄보겠습니다.

     

     

    SELECT LEVEL
    FROM DUAL
    CONNECT BY LEVEL <= 10;

     위 Python 코드를 SQL로 바꾸면 위와 같습니다.

     LEVEL은 for문의 i 역할을 하며, CONNECT BY문은 반복문이 끝나는 조건을 정해줍니다.

     

     

     

    2. 응용

    SELECT LEVEL, RPAD('*', LEVEL, '*') AS STRING
    FROM DUAL
    CONNECT BY LEVEL <= 5;

     다음은 익숙한 예제인 '별 찍기'입니다. 문구도 반복문으로 늘릴 수 있습니다.

     RPAD는 Right Paddng이라고 생각하시면 되며, RPAD('문자열', '문자열 크기', '패딩문자')는 문자열을 문자열 크기만큼 오른쪽에 패딩을 둡니다. 반대로 LPAD는 왼쪽에 패딩을 두는 함수입니다.

     

     

    SELECT TO_DATE('2022-01-01', 'YYYY-MM-DD') + LEVEL - 1 AS DATES
    FROM DUAL
    CONNECT BY LEVEL <= 10;

     사실 실질적으로 많이 쓰는 예제는 '날짜'와 관련된 경우입니다. 특정 기간의 데이터를 만들고 싶을 때, 주로 사용합니다.

     위 예제는 특정일로부터 10일 간의 날짜를 조회합니다.

     

    star가 되고나서 Tistory

    반응형

    댓글