티스토리 뷰
1. START WITH ... CONNECT BY - 역할
오라클에서 지원하는 계층적인 정보를 표현할 수 있게 지원하는 특별한 문장
◈ 구문형식
START WITH 조건1 .... CONNECT BY 조건2
- START WITH 조건1 : 역할
루트노드를 식별
조건1을 만족하는 모든 로우들은 루트노드가 됨
생략 시 모든 로우들을 루트노드로 간주
조건1에 서브쿼리도 가능
- CONNECT BY 조건2 : 역할
부모와 자식노드들 간의 관계를 명시
조건2에서는 반드시 PRIOR 연산자 포함 - 부모노드의 컬럼을 식별하는데 사용
조건2에는 서브쿼리는 불가능
2. START WITH ... CONNECT BY - 기본 테이블
◈ TEST_TABLE_ONE
IDX | NAME | ID | P_LEVEL | PP_LEVEL |
1 | 테스트1 | test1 | 1 |
|
2 | 테스트2 | test2 | 2 | 1 |
3 | 테스트3 | test3 | 3 | 1 |
4 | 테스트4 | test4 | 4 | 2 |
5 | 테스트5 | test5 | 5 | 2 |
3. START WITH ... CONNECT BY - SQL 문장
1 2 3 4 | SELECT LPAD(' ' ,2*(LEVEL-1)) || NAME FROM TEST_TABLE_ONE START WITH PP_LEVEL IS NULL CONNECT BY PRIOR P_LEVEL=PP_LEVEL |
◈ 결과 테이블
LPAD('',2*(LEVEL-1)) || NAME |
테스트1 |
테스트2 |
테스트4 |
테스트5 |
테스트3 |
◈ 설명
결과를 보게 된다면 LEVEL 이라는 것은 가상의 컬럼으로 계층정보를 표현할 때 레벨을 나타냅니다
그래서 위와 같이 사용이 가능하고 루트노드가 1 그 자식노드가 2 자식 노드의 자식 노드가 3... 이런 식으로
사용 가능합니다
'[개발]프로그래밍 > sql' 카테고리의 다른 글
[oracle] CONNECT_BY_ISCYCLE - 중복 참조 찾기 (0) | 2016.10.25 |
---|---|
[oracle] CONNECT_BY_ROOT - 최상위 루트노드 찾기 (0) | 2016.10.25 |
[oracle] MINUS - 특정 테이블 속한 데이터 표시(차집합) (0) | 2016.10.12 |
[oracle] INTERSECT - 공통된 데이터를 표시(교집합) (0) | 2016.10.12 |
[oracle] UNION , UNION ALL - 모든 데이터들을 표현(합집합) (0) | 2016.10.12 |
- Total
- Today
- Yesterday