한테이블에 레코드들이 계층관계(상위,하위)를 이루며 존재할 때, 이 관계에 따라 레코드를 계층관계(상위,하위) 한 구조로 데이터를 가져올 때 사용되는 SQL문을 의미한다.
쉽게말하자면 계층형 쿼리는 말그대로 계층 관계를 나타내는 쿼리문을 말한다.
예시) 부서, 메뉴, 권한 등 트리 구조의 데이터를 표시해 줄 때 사용
출처
SELECT 컬럼1, 컬럼2...
FROM 테이블
WHERE 조건
START WITH 최상위 조건
CONNECT BY [NOCYCLE][PRIOR 계층형 구조 조건]
CONNECT BY PRIOR 부모노드 = 자식노드
CONNECT BY 자식노드 = PRIOR 부모노드
계층형 구조가 어떤 식으로 연결되는 지를 기술하는 부분이다.
- NOCYCLE : 데이터를 펼치면서 이미 나타났던 데이터가 다시 나타나는 경우 CYCLE이 형성되었다라고 한다. 이때 오류가 발생하는데 NOCYCLE을 추가하면 사이클이 발생한 이후의 데이터를 출력하지 않는다.
LEVEL
- 계층 값을 가져옴
CONNECT_BY_ROOT 컬럼값
- 계층구조 쿼리에서 LEVEL이 0인 최상위 로우의 정보를 얻어 올 수 있습니다.
CONNECT_BY_ISLEAF
- 계층구조 쿼리에서 로우의 최하위 레벨(Leaf) 여부를 반환합니다. 최하위 레벨이면 1, 아니면 0
SYS_CONNECT_BY_PATH(컬럼값, 구분자)
- 계층구조 쿼리에서 현재 로우 까지의 PATH 정보를 가져올수 있습니다.
ORDER SIBLINGS BY 컬럼값
- 계층구조 쿼리에서 상관관계를 유지하면서 정렬을 할 수 있게 해줍니다.
SELECT NVL(MAX(NUM)+1, 1) FROM DUAL;
CREATE SEQUENCE SEQ_SEQUENCE -- 시퀀스 명
INCREMENT BY 1 -- 증가값
START WITH 1 -- 초기값
MINVALUE 1 -- 최소값
MAXVALUE 999999 / NOMAXVALUE -- 최대값 / 무한대
NOCYCLE / CYCLE -- 사이클 X / MAXVALUE값 이후 다시 MINVALUE 시작
CACHE 20 / NOCACHE -- 캐시 사용 유무
ORDER / NOORDER
SELECT SEQUENCE.NEXTVAL FROM DUAL;
SELECT SEQUENCE.CURRVAL FROM DUAL;
NEXTVAL : 다음번호 조회
CURRVAL : 현재번호 조회