Oracle/공부

[SQL] LEVEL을 이용해서 구구단 1단부터 9단까지 출력하기

maango97 2025. 1. 7. 23:57

 

머릿 속으로 암산을 하다가 퍼뜩 SQL로 구구단을 출력해보고 싶어져 쿼리를 작성해 보았다..!

 

 

파이썬에는 for 문이 있지만 SQL에서는 LEVEL을 이용하면 된다.

우선 구구단은 기본적으로 A(단) * B(곱할수) 구조 이므로 LEVEL을 두 개 사용했다.

 

# 첫 시도

SELECT 
    LEVEL AS 단,
    num AS 곱할수,
    LEVEL * num AS 결과
FROM 
    (SELECT LEVEL AS num FROM DUAL CONNECT BY LEVEL <= 9),
    DUAL
CONNECT BY LEVEL <= 9
ORDER BY 단, 곱할수;

 

 

처음엔 이렇게 쿼리를 작성하였으나 숫자값이 중복되어 출력되는 현상이 발생했다.

LEVEL과 num을 독립적으로 명시해주지 않았기 때문이다!

또한 CONNECT BY가 중첩되면서 조합이 중복적으로 생성된다.

 

 

 

1단부터 9단까지 오류 없이 출력되는 쿼리는 아래와 같다.

# 정상적으로 출력되는 쿼리

SELECT 
    A.lvl AS 단,
    B.lvl AS 곱할수,
    A.lvl * B.lvl AS 결과
FROM 
    (SELECT LEVEL AS lvl FROM DUAL CONNECT BY LEVEL <= 9) A
CROSS JOIN 
    (SELECT LEVEL AS lvl FROM DUAL CONNECT BY LEVEL <= 9) B
ORDER BY 단, 곱할수;

 

 

<수정 부분>

1. 그냥 조인이 아닌 CROSS JOIN으로 단과 곱할수를 독립적으로 만들어준다(9*9).

2. LEVEL은 예약어라서 별칭을 쓰지 못한다(A.LEVEL, B.LEVEL이라고 명시해주면 오류가 난다). 그래서 lvl이라는 컬럼 별칭을 따로 줘서 서로 다른 값으로 처리할 수 있게 한다.

3. FROM 절의 서브쿼리 2개에 LEVEL을 각각 넣어서 CONNECT BY가 서로 중첩되지 않게 했다.

 

 

파이썬을 처음 배울 때 구구단을 출력하는 것부터 시작했는데 SQL도 뽑아보니 새로운 느낌이었다 .. !