Jin's Dev Story

[Oracle] LEVEL(feat. DUAL, CONNECT BY) 본문

Database/Oracle

[Oracle] LEVEL(feat. DUAL, CONNECT BY)

woojin._. 2024. 6. 13. 09:03

LEVEL을 활용한 문제
https://school.programmers.co.kr/learn/courses/30/lessons/59413

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

-- 코드 풀이
SELECT 
    B.TIME AS HOUR
    , NVL(COUNT(AO.ANIMAL_ID), 0) AS COUNT 
FROM ANIMAL_OUTS AO
    RIGHT OUTER JOIN (SELECT LEVEL -1 TIME 
                      FROM DUAL
                      CONNECT BY LEVEL <= 24) B
    ON B.TIME = TO_NUMBER(TO_CHAR(AO.DATETIME, 'HH24'))
GROUP BY B.TIME
ORDER BY B.TIME;

LEVEL

  • 숫자 형식으로 계층 수준(상위 → 하위)를 식별하기 위해 계층 쿼리에서 사용되는 의사 열을 나타냄
  • root 행에 대해 1을 부여하며 그 다음 행은 2, 3, 4 ..가 되는 구조로 반환함
  • 이 같은 구조는 CONNECT BY절 사용을 통해 만들 수 있음

CONNECT BY

  • 계층 구조의 상위 행과 하위 행 간의 계층 관계를 정의해주는 것

DUAL

  • 더미 테이블
  • 더미 테이블에 LEVEL 값을 각 행에 부여하여 반환하는 것

예시

EX1) 기본 예제

SELECT LEVEL
FROM DUAL
CONNECT BY LEVEL <= 5
LEVEL
1
2
3
4
5

 

EX2) 답안 예제 속 서브 쿼리

  • (LEVEL -1) 이기에 0~23까지 행이 반환 되는 것
SELECT LEVER -1 HOUR 
FROM DUAL 
CONNECT BY LEVEL <= 24
HOUR
0
1
2
(중간 생략)
22
23

'Database > Oracle' 카테고리의 다른 글

[MySQL & Oracle] MySQL과 Oracle의 차이  (0) 2023.08.22
[Oracle] Oracle이란?  (0) 2023.08.22