TOP
class="layout-aside-left paging-number">
본문 바로가기
자격증/SQLD

SQLD 2과목 SQL 활용 - 계층형 질의(보강)

by 기록자_Recordian 2024. 2. 18.
728x90
반응형

[예전에 올렸던 자료]
계층형 질의

 

SQLD 2과목 SQL 활용 - 계층형 질의와 셀프 조인 (1)

서브쿼리 집합연산자 그룹 함수 윈도우 함수 TOP N 쿼리 계층형 질의와 셀프 조인 PIVOT 절과 UNPIVOT 절 정규 표현식 ※ 자료출처: 데이터 자격검정 협회 6. 계층형 질의와 셀프 조인 A. 계층형 질의

puppy-foot-it.tistory.com

 

참고로, 아래 설명하는 내용들은 '쏭즈 SQLD' 강의 내용을 바탕으로 만들었습니다.
출처: https://youtu.be/JxyMJNX24LY

 

 
 


계층형 질의

 
계층형 질의: 테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해 사용
 
ORACLE - 계층형 쿼리 지원
SQL Server - 계층형 쿼리 미지원. 기본적인 문장(CTE) 활용하여 생성
* CTE (Common Table Expression)
 
<계층형 질의 일반적인 SQL문>

* NO CYCLE: 싸이클이 생기는 경우 런타임 오류가 발생하니 NO CYCLE 입력하여 1 싸이클만 생성
 
 

CONNECT BY PRIOR 자식 칼럼 = 부모 칼럼    ---> 부모에서 자식으로 트리 구성 (순방향)

CONNECT BY  자식 칼럼 = PRIOR 부모 칼럼    ---> 자식에서 부모로 트리 구성 (역방향)

CONNECT BY PRIOR 부모 칼럼 = 자식 칼럼    ---> 자식에서 부모로 트리 구성 (역방향)

CONNECT BY  부모 칼럼 = PRIOR 자식 칼럼    ---> 부모에서 자식으로 트리 구성 (순방향)

 

프자부순! 만 외우면 크게 헷갈리지 않는다.
(PRIOR 자식 = 부모 > 순방향 전개)


* PRIOR 키워드는 SELECT 나 WHERE 절에도 사용 가능
 


가상 칼럼

 

  • LEVEL: 루트 데이터를 1, 그 아래 노드는 2, 루트 데이터와 거리가 멀어질수록 점차 증가 (상하 관계 없이)
  • CONNECT_BY_ISLEAF: 해당 데이터가 리프 노드이면 1, 아니면 0

CONNECT BY 부모 = PRIOR 자식 > 순방향 전개

CONNECT BY 부모 = PRIOR 자식 > 순방향 전개


 

CONNECT BY PRIOR 부모 = 자식 > 역방향 전개

CONNECT BY PRIOR 부모 = 자식 > 역방향 전개

 


 

다른 데이터를 루트 노드로 설정할 때

 

 


예제1

 
[SQL 자격검정 실전문제 (노랭이) P.94 87번 문제]
 
아래와 같은 데이터 상황에서 아래의 SQL을 수행할 경우 정렬 순서상 2번째에 표시될 값을 적으시오.
 
<TAB1>

C1 C2 C3
1   A
2 1 B
3 1 C
4 2 D

 

SELECT C3
FROM TAB1
START WITH C2 IS NULL
CONNECT BY PRIOR C1 = C2
ORDER SIBLINGS BY C3 DESC;

 
▶ 풀이

 

▶ 답: C

C3
A
C
B
D

 


예제2

 
[SQL 자격검정 실전문제 (노랭이) P.95 89번 문제]
 
다음 중 아래와 같은 사원 테이블에 대해서 SQL을 수행하였을 때의 결과로 가장 적절한 것은?
 
<테이블: 사원>

사원번호(PK) 사원명 입사일자 매니저사원번호(FK)
001 홍길동 2012-01-01 NULL
002 강감찬 2012-01-01 001
003 이순신 2013-01-01 001
004 이민정 2013-01-01 001
005 이병헌 2013-01-01 NULL
006 안성기 2014-01-01 005
007 이수근 2014-01-01 005
008 김병만 2014-01-01 005

 

<SQL>

SELECT 사원번호, 사원명, 입사일자, 매니저사원번호
FROM 사원
START WITH 매니저사원번호 IS NULL
CONNECT BY PRIOR 사원번호 = 매니저사원번호
   AND 입사일자 BETWEEN '2013-01-01' AND '2013-12-31'
ORDER SIBLINGS BY 사원번호;

 
▶ 풀이

 

▶ 답: 

사원번호(PK) 사원명 입사일자 매니저사원번호(FK)
001 홍길동 2012-01-01 NULL
003 이순신 2013-01-01 001
004 이민정 2013-01-01 001
005 이병헌 2013-01-01 NULL

※ '홍길동' 사원의 경우, 입사일자가 조건에 부합하지 않으나, 루트 데이터는 항상 출력 값에 포함 됨.
루트 데이터 (홍길동 - 001 / 이병헌 - 005)

728x90
반응형