애플리케이션 개발/SQL

[SQL] 계층형 쿼리

sofiaaa 2023. 6. 1. 10:01
반응형
SELECT LEVEL
        , LPAD(' ' ,2*(LEVEL-1)) || NAME AS NAME
        , CONNECT_BY_ROOT NAME AS ROOT_NAME 
FROM  TEST_TABLE_ONE
WHERE LEVEL >= 2
    START WITH PP_LEVEL IS NULL
    CONNECT BY PRIOR P_LEVEL = PP_LEVEL

 

CONNECT_BY_ROOT

최상위 노드 찾기

CONNECT_BY_ROOT NAME AS ROOT_NAME - 최상의 노드의 NAME이 조회

-- 최상의 노드의 NAME 조회
CONNECT_BY_ROOT NAME AS ROOT_NAME

 

LEVEL 

조회되는 레벨

 

-- 4 레벨만 조회 
LEVEL = 4

-- 2 이상 레벨만 조회
LEVLE >= 2

LEVEL = 4 -  4 레벨만 조회 

LEVLE >=2 - 2 이상 레벨만 조회 

 

 

START WITH

최상위 노드의 조건

 

-- PP_LEVEL이 NULL인 조건이 최상위 노드
START WITH PP_LEVEL IS NULL

 

 

CONNECT BY PRIOR

현재 노드 = 상위 노드

-- 현재 노드인 P_LEVEL 과 상위 노드인 PP_LEVLE을 연결
CONNECT BY PRIOR P_LEVEL = PP_LEVEL

 

 

ROW_NUMBER() OVER (PARTITION BY - ORDER BY -)

SELECT a, b, c,
	ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) AS sort_no
FROM table
WHERE 1 = 1;

 

 

https://devjhs.tistory.com/166

 

[oracle] CONNECT_BY_ROOT - 최상위 루트노드 찾기

1. CONNECT_BY_ROOT - 역할계층형 쿼리에서 최상위 노드를 찾고자 할 경우 2. CONNECT_BY_ROOT - 기본 테이블◈ TEST_TABLE_ONE IDXNAMEID P_LEVEL PP_LEVEL 1테스트1test1 1 2테스트2test2 2 1 3테스트3test3 3 1 4테스트4test4 4 2

devjhs.tistory.com

반응형