SQLD 시험 범위를 블로그에 정리하고, 공부하고, 기출문제를 푸는 중인데
여전히 이해 안 되는 개념들이 몇 가지가 있다.
그 중 하나는 셀프 조인
아래는 이전에 공부한다고 올려놓은 자료인데, 내가 (자료를 보며) 쓴 거 지만, 이해가 잘 안 됐다.
그래서 다른 수험생분들도 어려울 수 있다고 생각되어 (조금 더 쉽게 풀어낸) 보강 자료를 올려보고자 한다.
[예전에 올렸던 자료]
참고로, 아래 설명하는 내용들은 '쏭즈 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 라는 뜻이다.
유튜브로 본 것을 직접 말로 풀어 설명하려니 쉬운 것이 아니네요....
유튜버 님들 너무 감사합니다.
복 세 배, 열 배, 백 배 받으세요!
'자격증 > SQLD' 카테고리의 다른 글
SQLD 2과목 SQL 활용 - 서브쿼리 (보강) (0) | 2024.02.19 |
---|---|
SQLD 2과목 SQL 활용 - 계층형 질의(보강) (1) | 2024.02.18 |
[SQLD] 셀프조인, 계층형 질의 이해를 위한 꿀팁 영상 (0) | 2024.02.15 |
[SQLD 기출문제 ] 1과목 - 엔터티 (1) | 2024.02.03 |
[SQLD 기출문제 ] 1과목 데이터모델의 이해 (0) | 2024.02.03 |