oracle 차원 조회 문

2824 단어 Oacleconnectby/start
Oracle 중 차원 조회 문법:
     select  ...
     [level | connect_by_root |connect_by_isleaf |connect_by_iscycle ]
     from table_name
     [where] 
     connect by { prior col1=col2 | col1=prior col2 }
    [start with]
    [order [siblings] by];
connect by: 각 줄 의 데 이 터 를 차원 순 으로 검색 하고 표 의 데 이 터 를 트 리 구조의 관계 에 연결 하도록 규정 합 니 다.prior 연산 자 는 연결 관계 의 두 열 중 하나 앞 에 놓 아야 합 니 다. 하위 노드 간 의 부자 관계 에 대해 prior 연산 자가 있 는 한쪽 은 부모 노드 이 고 다른 한쪽 은 하위 노드 입 니 다. 트 리 구 조 를 찾 는 순서 가 위 에서 아래로 인지 아래 에서 위로 인지 확인 해 야 합 니 다.
start with: 어떤 노드 를 트 리 구 조 를 찾 는 루트 노드 로 표시 하 는 지, 차원 조 회 는 시작 점 을 확인 하고 start with 를 통 해 조건 을 추가 해 야 합 니 다.start with 는 어떤 줄 을 root 로 할 지 확인 합 니 다. start with 를 지정 하지 않 으 면 모든 줄 을 root 로 하고 그 후손 을 찾 습 니 다.start with 후 하위 와 조회 할 수 있 습 니 다. 만약 에 where 조건 이 있 으 면 차원 에서 관련 조건 을 만족 시 키 는 노드 를 차단 하지만 전체 차원 조회 에 영향 을 주지 않 습 니 다.
level: 위 열 입 니 다. 현재 이 노드 가 있 는 등급 을 대표 합 니 다. 루트 노드 에 대해 level 은 1 을 되 돌려 줍 니 다. 이 위 열 을 통 해 다른 Oacle 함수 와 결합 하여 데 이 터 를 포맷 합 니 다.
connect_by_root:connect_by_루트 는 루트 노드 에 기 록 된 필드 정 보 를 얻 기 위해 서 필드 와 조합 해서 사용 해 야 합 니 다.
connect_by_isleaf: 현재 결점 이 잎 노드 인지 판단 하고 0 은 비 잎 노드 를 나타 내 며 1 은 잎 노드 를 나타 낸다.
connect_by_cycle: 트 리 조회 과정 에서 순환 이 되 는 지 확인 할 수 있 습 니 다. 이 위 열 은 connect 에 만 있 습 니 다.by_cycle 방식 에서 유효 합 니 다.
order siblings by: 되 돌아 갈 때 부모 노드 의 각 형제 노드 간 의 순 서 를 정의 합 니 다.
예:
--     emp;
select * from emp;
EMP_ID              EMP_NAME              UP_EMP_ID    
---------            ---------------         ---------------  
1              USER1              0         
2              USER2              1
3              USER3              1 
4              USER4              2
5              USER5              2
6              USER6              3
--    emp_id=1  ,                
select  emp_id,emp_name,up_emp_id,level
from emp
start with emp_id=1
connect by prior emp_id=up_emp_id
order siblings by emp_id;
EMP_ID                EMP_NAME           UP_EMP_ID                        LEVEL
---------              ---------------      ---------------                    --------
1               USER1            0                       1
2               USER2            1                       2
4               USER4            2                       3
5               USER5            2                       3
3               USER3            1                       2
6               USER6            3                       3
-- emp_id=6,      emp_id=6      
select emp_id,emp_name,up_emp_id 
from  emp
start with emp_id=6
connect by emp_id = prior up_emp_id
order by  emp_id;
EMP_ID              EMP_NAME             UP_EMP_ID    
---------            ---------------        ---------------  
1              USER1             0
3              USER3             1
6              USER6             3

좋은 웹페이지 즐겨찾기