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

SQLD 2과목 SQL 활용 - 셀프 조인(보강)

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

SQLD 시험 범위를 블로그에 정리하고, 공부하고, 기출문제를 푸는 중인데

여전히 이해 안 되는 개념들이 몇 가지가 있다.

 

그 중 하나는 셀프 조인

아래는 이전에 공부한다고 올려놓은 자료인데, 내가 (자료를 보며) 쓴 거 지만, 이해가 잘 안 됐다.

그래서 다른 수험생분들도 어려울 수 있다고 생각되어 (조금 더 쉽게 풀어낸) 보강 자료를 올려보고자 한다.

 

[예전에 올렸던 자료]

셀프 조인

 

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

서브쿼리 집합연산자 그룹 함수 윈도우 함수 TOP N 쿼리 계층형 질의와 셀프 조인 PIVOT 절과 UNPIVOT 절 정규 표현식 ※ 자료출처: 데이터 산업 진흥원(K-DATA) 6. 계층형 질의와 셀프 조인 B. 셀프 조인

puppy-foot-it.tistory.com


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

 

셀프 조인 (Self Join)

 

셀프 조인: 테이블을 동일한 자신에게 다시 조인하는 것.

  • FROM 절에 동일 테이블 2번 이상 기입
  • 동일 테이블로 조인을 하기 때문에 테이블을 서로 구별할 수 있게 ALIAS 명을 구별
  • 보통 한 테이블 내에서 두 개 이상의 칼럼이 연관되어 분석되어야 할 경우 사용

 

우선, EMP 테이블의 사원번호, 사원명, 관리자를 조회해 보면

SELECT EMPNO, ENAME, MGR
FROM EMP;

 

 

위의 데이터 중 관리자 (MGR 컬럼)의 이름이 표기된 데이터를 조회하고 싶다.

 

이러한 경우,
EMP A는 사원용 테이블, EMP B는 관리자 정보 테이블 이라는 가정으로,

셀프 조인 필요하고, 쿼리문은 아래와 같다.

 

[셀프 조인]

SELECT A.EMPNO 사원번호, A.ENAME 사원명, B.ENAME 상사
FROM EMP A, EMP B
WHERE A.MGR = B.EMPNO;

 

상단의 쿼리문을 풀어내면 이런 식이 된다.

 

그리고 쿼리문의 결과는 다음과 같다.

이를 조직도로 풀어보면

못 그려서 죄송...

 

이러한 구조가 된다.


루트 노드, 리프 노드, 형제 노드, 부모 노드, 자식 노드

 

  • 루트노드: 계층형에서 가장 상위 (계층이 시작되는 곳)
  • 리프노드: 계층형에서 가장 마지막
  • 형제노드: 같은 계층에 속하는 노드
  • 부모 노드: 상위 계층
  • 자식 노드: 하위 계층

단, 루트노드는 계층을 어떻게 볼 것인가 (어디에서부터 시작할 것인가)에 따라 달라짐.

 

아까 상단의 조직도를 기준으로 루프노드, 리프노드, 형제노드를 나눠보면 다음과 같다.

다시 한 번 눈 아프게 해서 죄송...

 

  • KING이 가장 상단에 있으므로, 루트노드
  • JONES, BLAKE, CLARK 은 KING의 자식 노드 이면서 서로 형제노드
  • SCOTT, FORD는 JONES 의 자식 노드 이면서 서로 형제노드
  • TURNER, ALLEN, WARD, MARTIN, JAMES는 BLAKE의 자식 노드 이면서 서로 형제 노드 & 리프 노드
  • MILLER는 CLARK의 자식 노드 이면서 리프노드
  • ADAMS 는 SCOTT의 자식 노드 이면서 리프 노드
  • SMITH 는 FORD의 자식 노드 이면서 리프 노드

 

부모 노드, 자식 노드 조회

 

에제. MARTIN의 상사(부모 노드)를 확인하는 SQL 쿼리문을 작성하시오.

 

해당 쿼리문을 작성하면 SQL에는 이렇게 나온다.

 

EMPNO     ENAME     MGR
-----------     -----------     -------
7698          BLAKE       7839

 

예제. JONES의 자식 노드를 확인하는 SQL 쿼리문을 작성하시오.

해당 쿼리문의 결과 값은

사원번호     사원명      상사
-----------       --------       -----
7788            SCOTT    JONES
7902            FORD      JONES

 

이렇게 부모 노드를 조회하는 것을 '역방향 전개(조회)'

라고 하며, 반대로 자식 노드를 조회하는 것을 '순방향 전개(조회)' 라고 한다.

 


레벨(Level)

 

앞선 내용에서 

"루트노드는 계층을 어떻게 볼 것인가 (어디에서부터 시작할 것인가)에 따라 달라진다."

라고 했는데, 루트노드는 값이 1 이며, 루트노드로 부터 떨어지면 레벨이 1씩 증가한다.

 

여기서 중요한 점은, 루트노드로부터 1로 올라 가던지, 내려 가던지 등의 상하 방향과 관계 없이 동일하게 1씩 증가한다는 것이다.

 

만약, Blake 가 루트 노드 라면, King의 레벨은 2 이며, Turner 의 레벨 역시 2 라는 뜻이다.

 

 

유튜브로 본 것을 직접 말로 풀어 설명하려니 쉬운 것이 아니네요....

유튜버 님들 너무 감사합니다.

복 세 배, 열 배, 백 배 받으세요!

 

 

728x90
반응형