64번 문제 관련
作成
·
31
·
編集済み
0
안녕하세요. 시험이 바로 내일이지만 이상한 것 같아 질문드립니다.
CONNECT BY PRIOR 부모 = 자식 순방향 CONNECT BY 자식 = PRIOR 부모 도 순방향,
CONNECT BY 부모 = PRIOR 자식 역방향
CONNECT BY PRIOR 자식 = 부모 도 역방향 으로 알고있습니다. PRIOR 위치에 따라 달라지는게 아니라 테이블의 기준으로 순방향 역방향이 정해지는걸로 알고있습니다.
그리고 부모가 부서코드, 자식이 상위부서코드 아닌가요?
확인 부탁드리겠습니다.
クイズ
서브쿼리 결과가 여러 행을 반환할 때 사용할 수 없는 비교 연산자는 무엇일까요?
IN
ALL
=
ANY
回答 2
0
안녕하세요. 알고런입니다.
시험 전날이네요. 헷갈리는 부분이라 빠르게 정리해 드릴게요.
결론부터 말하면, 방향은 PRIOR가 “어느 컬럼”에 붙느냐로 정해집니다. “테이블 기준으로 정해진다”는 이해는 살짝 어긋나 있어요.
1. 먼저 컬럼 구조부터 바로잡기
부서 테이블은 보통 이렇게 생겼습니다.
∙ 부서코드 : 그 행(부서) 자기 자신의 식별자
∙ 상위부서코드 : 그 부서의 부모를 가리키는 포인터
여기서 핵심은, “부모/자식”은 행(row)들 사이의 관계이지 컬럼 이름이 아니라는 점이에요. 그래서 “부모 = 부서코드, 자식 = 상위부서코드” 라는 표현은 개념이 살짝 꼬여 있습니다.
정확히는 이렇습니다:
자식 행의 상위부서코드 = 부모 행의 부서코드
즉 모든 행이 부서코드(나의 ID) 와 상위부서코드(부모를 가리키는 값) 를 둘 다 가지고 있고, 같은 행이라도 위에서 보면 자식, 아래에서 보면 부모가 됩니다.
2. PRIOR의 의미
PRIOR는 “이미 읽은 부모 행(한 단계 이전 행)” 을 가리키는 키워드입니다. CONNECT BY 식은 항상 이 등식이에요.
[부모(이전) 행의 부서코드] = [자식(현재) 행의 상위부서코드]
= PRIOR 부서코드 = 상위부서코드
3. 방향을 정하는 진짜 기준
PRIOR가 어느 컬럼에 붙느냐가 방향을 정합니다. 등호의 좌우 순서는 아무 의미 없습니다.
정방향 (최상위 → 하위로 전개)
START WITH 상위부서코드 IS NULL
CONNECT BY PRIOR 부서코드 = 상위부서코드
역방향 (특정 부서 → 상위로 거슬러 올라감)
START WITH 부서코드 = 'C100'
CONNECT BY PRIOR 상위부서코드 = 부서코드
차이는 딱 하나 — PRIOR가 부서코드에 붙었나(정방향), 상위부서코드에 붙었나(역방향)뿐입니다.
4. 질문하신 네 가지 진술 평가
∙ PRIOR 부모 = 자식 과 자식 = PRIOR 부모 → 같은 식이라 같은 방향. 맞습니다. (좌우만 바꾼 것)
∙ 부모 = PRIOR 자식 과 PRIOR 자식 = 부모 → 역시 같은 식, 같은 방향. 맞습니다.
여기까지는 맞아요. 다만 “PRIOR 위치에 따라 달라지는 게 아니다”는 틀렸습니다. 위 1번·3번에서 방향이 뒤집힌 이유가 바로 PRIOR가 붙은 컬럼이 달라졌기 때문이거든요. “등호 좌우는 무관, PRIOR가 붙은 컬럼은 결정적” — 이 둘을 분리해서 기억하시면 됩니다.
그리고 부모 자식이라는 용어를 많이 쓰긴 하지만, 이전 행의 부서코드 = 현재 행의 상위 부서코드 prior dept_code = p_dept_code
로 익히시는 게 더 이해가 쉬울거에요
시험용 한 줄 암기
CONNECT BY PRIOR 부서코드 = 상위부서코드 → 위에서 아래로(정방향).
PRIOR를 반대 컬럼으로 옮기면 아래에서 위로(역방향). 등호 좌우 순서는 신경 안 써도 됨.
이거 하나만 기준점으로 잡고 나머지를 그 변형으로 생각하시면 헷갈릴 일 없습니다. 내일 시험 잘 보세요!
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 우냥님.
SQL에서 CONNECT BY의 사용은 계층적 구조를 탐색하는 데 매우 중요하며 혼란을 줄 수 있습니다. CONNECT BY 절에서 PRIOR 키워드의 사용 위치에 따라 순방향과 역방향 탐색이 결정됩니다.
CONNECT BY PRIOR 부모 = 자식는 순방향 탐색을 의미합니다. 이는 부모에서 자식으로의 계층 구조를 탐색합니다. 즉, 부모로부터 자식으로 내려가는 과정입니다.CONNECT BY 자식 = PRIOR 부모는 역방향 탐색을 의미합니다. 이는 자식에서 부모로의 계층 구조를 탐색합니다. 즉, 자식으로부터 부모로 올라가는 과정입니다.
당신이 설명한 기준이 맞습니다:
- CONNECT BY PRIOR 부모 = 자식: 순방향
- CONNECT BY 자식 = PRIOR 부모: 순방향
- CONNECT BY 부모 = PRIOR 자식: 역방향
- CONNECT BY PRIOR 자식 = 부모: 역방향
이와 관련하여 추가적인 이해와 시각적 설명이 필요하실 경우, 아래 유사한 질문들을 참고해 보시면 도움이 될 것입니다:
이 링크에서는 CONNECT BY 구문에서 순방향과 역방향에 관한 심도 깊은 설명이 있습니다. 이를 통해 질문이 해결되길 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




