[Oracle] start with connect by prior 사용하여 상하 관계 데이터 처리하기

Published on: 2013. 11. 14. 16:18 by louis.dev
오라클에서 데이터를 저장하다 보면 한 테이블 내에 부모 자식 관계(상하위 관계)로 표현하는 데이터가 발생될 때가 있다. 예를 들어
게시판 ↳ 공지사항 게시판 ↳ 사용자 게시판
와 같이 메뉴를 저장하는 테이블이 있다면 상위 게시판이라는 메뉴는 하위에 공지사항 게시판 메뉴, 사용자 게시판 메뉴를 하위로 가진다면, 데이터 구조는 다음과 같이 생성될 것이다.
MENUID NAME URL PARENTMENUID
1 공지사항 게시판 /notice.html 2
2 게시판 /index.html null
3 사용자 게시판 /user.html 2
만약 쿼리를 상위 메뉴 데이터를 먼저 나오게 하고 그 뒤에 하위 메뉴들을 나오게 하려면 어떻게 해야할까? 이때 Oracle에서는 start with, connect by prior를 사용하여 데이터를 셀렉트 할수 있다.
SELECT
	menuid, name, url, parentmenuid
FROM menu
START WITH parentmenuid is null	/*상위(부모)의 조건을 명시*/
CONNECT BY PRIOR menuid = parentmenuid	/*상위의 키와 하위의 키를 열결시킴*/
ORDER SIBLINGS BY menuid ASC;	/*하위데이터 정렬 조건*/
이렇게 쿼리를 사용하게 되면 다음과 같이 셀렉팅이 된다.
MENUID NAME URL PARENTMENUID
2 게시판 /index.html null
1 공지사항 게시판 /notice.html 2
3 사용자 게시판 /user.html 2