`PRIOR` 키워드는 계층적 쿼리에서 부모 노드와 자식 노드를 연결할 때 사용하는 중요한 개념입니다. 이걸 이해하기 위해, `PRIOR`가 무엇을 의미하는지와, 어떻게 `CONNECT BY` 구문에서 사용되는지를 구체적으로 설명드리겠습니다.
### 기본 개념
1. **`START WITH MGRD IS NULL`**:
- 이 부분은 계층 구조의 시작점, 즉 **루트 노드**를 결정합니다. `MGRD`가 `NULL`인 레코드를 루트 노드로 선택합니다. 따라서, 루트 노드는 `EMPID`가 `1000`과 `1004`인 레코드입니다.
2. **`CONNECT BY PRIOR EMPID = MGRD`**:
- `PRIOR`는 이전 단계의 결과를 참조합니다. 이 구문은 현재 노드의 `MGRD`가 이전 노드(부모 노드)의 `EMPID`와 일치할 때 부모-자식 관계를 형성합니다.
### 예를 들어보겠습니다:
#### 1. 루트 노드 선택 (START WITH):
- `EMPID = 1000`과 `EMPID = 1004` 레코드가 선택됩니다. 이들이 루트 노드입니다.
#### 2. `CONNECT BY PRIOR EMPID = MGRD`의 의미:
- **첫 번째 반복**:
- 루트 노드 `EMPID = 1000`을 선택합니다.
- 이때, 다음으로 자식 노드를 찾기 위해 `PRIOR EMPID`는 1000입니다.
- `CONNECT BY`는 이제 `MGRD = 1000`인 자식 노드를 찾습니다.
- `MGRD = 1000`인 자식 노드들(예: `EMPID = 1001`, `EMPID = 1002`, `EMPID = 1003`)이 부모 노드로부터 발견됩니다.
- **두 번째 반복**:
- 이제 `EMPID = 1001`(자식 노드)의 자식 노드를 찾습니다.
- 이때, `PRIOR EMPID`는 1001입니다.
- `CONNECT BY`는 이제 `MGRD = 1001`인 자식 노드를 찾습니다.
- `MGRD = 1001`인 자식 노드들(예: `EMPID = 1004`)이 발견됩니다.
- 같은 방식으로 `EMPID = 1004` 루트 노드에 대해서도 적용됩니다. 다만, `EMPID = 1004`는 다른 노드의 자식이기도 하므로, 그 아래의 자식 노드도 마찬가지로 연결됩니다.
### 정리
- `PRIOR EMPID = MGRD`의 의미는 "현재 노드의 `MGRD`가 부모 노드의 `EMPID`와 동일하다"는 것을 나타냅니다.
- `PRIOR`은 직전 단계의 노드, 즉 부모 노드의 `EMPID`를 참조합니다.
- 이 구문은 부모-자식 관계를 나타내는 계층 구조를 탐색하는 데 사용됩니다.
따라서 `PRIOR`는 이전 노드(부모 노드)의 `EMPID` 값을 현재 노드의 `MGRD`와 비교하여 부모-자식 관계를 설정하는 중요한 역할을 합니다.