[Oracle] start with connect by prior 사용하여 상하 관계 데이터 처리하기
개발/Database2015. 7. 22. 10:17
오라클에서 데이터를 저장하다 보면 한 테이블 내에 부모 자식 관계(상하위 관계)로 표현하는 데이터가 발생될 때가 있다. 예를 들어
게시판 ↳ 공지사항 게시판 ↳ 사용자 게시판
와 같이 메뉴를 저장하는 테이블이 있다면 상위 게시판이라는 메뉴는 하위에 공지사항 게시판 메뉴, 사용자 게시판 메뉴를 하위로 가진다면, 데이터 구조는 다음과 같이 생성될 것이다.
MENUID | NAME | URL | PARENTMENUID |
1 | 공지사항 게시판 | /notice.html | 2 |
2 | 게시판 | /index.html | null |
3 | 사용자 게시판 | /user.html | 2 |
만약 쿼리를 상위 메뉴 데이터를 먼저 나오게 하고 그 뒤에 하위 메뉴들을 나오게 하려면 어떻게 해야할까? 이때 Oracle에서는 start with, connect by prior를 사용하여 데이터를 셀렉트 할수 있다.
1 2 3 4 5 6 | 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 |
[원문출처]http://krespo.net/171
'개발 > Database' 카테고리의 다른 글
Oracle Sql Developer Data Modeler 기본 설정 (0) | 2017.11.16 |
---|---|
MySQL에서 계층 적 데이터 관리하기 (0) | 2017.02.08 |
[Oracle 11g] group by로 그룹핑한 row들의 문자열 합치기(concat) (0) | 2015.07.22 |
oracle 계정 만료 관련 정리 (0) | 2015.06.15 |
[MYSQL] 5 윈도우 서비스 등록 (0) | 2015.01.28 |