오라클에서 데이터를 저장하다 보면 한 테이블 내에 부모 자식 관계(상하위 관계)로 표현하는 데이터가 발생될 때가 있다.
예를 들어
만약 쿼리를 상위 메뉴 데이터를 먼저 나오게 하고 그 뒤에 하위 메뉴들을 나오게 하려면 어떻게 해야할까? 이때 Oracle에서는 start with, connect by prior를 사용하여 데이터를 셀렉트 할수 있다.
게시판 ↳ 공지사항 게시판 ↳ 사용자 게시판와 같이 메뉴를 저장하는 테이블이 있다면 상위 게시판이라는 메뉴는 하위에 공지사항 게시판 메뉴, 사용자 게시판 메뉴를 하위로 가진다면, 데이터 구조는 다음과 같이 생성될 것이다.
MENUID | NAME | URL | PARENTMENUID |
1 | 공지사항 게시판 | /notice.html | 2 |
2 | 게시판 | /index.html | null |
3 | 사용자 게시판 | /user.html | 2 |
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 |
'DB > Oracle' 카테고리의 다른 글
[Oracle 11g] group by로 그룹핑한 row들의 문자열 합치기(concat) (2) | 2013.12.18 |
---|