공든탑앱 열기

셀프 조인

SQLD (SQL 개발자) · Top N·계층형 질의·PIVOT·정규 표현식 · 약 10분

쉽게 말하면

셀프 조인은 한 표를 두 번 불러와 자기 자신과 잇는 거예요. 사원 표에 '내 관리자 번호' 칸이 있으면, 같은 사원 표를 한 번 더 불러와 관리자 이름을 찾아요. 같은 표를 두 번 쓰니까 별명(별칭)을 달리 붙여 어느 쪽이 사원이고 어느 쪽이 관리자인지 구분해요.

시험용 정의

셀프 조인(Self Join)은 한 테이블을 별칭을 달리해 두 번 이상 읽고 자기 자신과 조인하는 것이다. 한 테이블 안의 열이 같은 테이블의 다른 행을 가리킬 때(사원.관리자사번 → 사원.사번) 쓴다. 문법은 일반 조인과 같고, 같은 테이블이라 별칭으로 역할을 구분해야 한다.

비유로 이해하기

학급 명단 한 장을 복사해 두 장으로 만드는 것이다. 한 장은 '학생' 명단, 다른 한 장은 '짝꿍' 명단으로 보고 "짝꿍 번호 = 학생 번호"로 맞춰 읽는다.

자세히

먼저 알아 둘 말

말뜻
MGREMP 테이블에서 그 사원의 관리자 사번. 같은 EMP의 EMPNO를 가리킨다
별칭FROM emp e, emp m 처럼 같은 테이블에 붙인 서로 다른 이름. 역할을 구분한다
순환 관계엔터티가 자기 자신과 맺는 관계. 셀프 조인으로 조회한다

셀프 조인 모양

목적SQL
사원과 관리자SELECT e.ename, m.ename FROM emp e, emp m WHERE e.mgr = m.empno
관리자 없는 사원도 포함… FROM emp e LEFT OUTER JOIN emp m ON e.mgr = m.empno
관리자의 관리자… FROM emp e, emp m, emp g WHERE e.mgr = m.empno AND m.mgr = g.empno
같은 날 입사한 다른 사원… WHERE a.hiredate = b.hiredate AND a.empno <> b.empno

주의

  • 별칭 없이 FROM emp, emp로 쓰면 어느 쪽 열인지 구별할 수 없어 오류다
  • 조인 방향이 중요하다. e.mgr = m.empno면 m이 e의 관리자, 반대로 쓰면 m이 e의 부하가 된다
  • 최상위 관리자(KIM)는 MGR이 NULL이라 일반 셀프 조인 결과에서 빠진다. 포함하려면 OUTER JOIN
  • 단계가 깊은 트리 전체를 따라가려면 셀프 조인을 계속 붙이기보다 계층형 질의가 편하다

시험에 이렇게 나와요

출제 범위·공식 안내 기반

확인 문제

Q1. EMP의 MGR 열은 관리자의 사번(EMPNO)이다. 사원 이름과 관리자 이름을 함께 보려면?

  1. EMP와 DEPT를 조인한다
  2. MGR 열을 그대로 출력한다
  3. EMP를 별칭 두 개로 두 번 읽어 e.mgr = m.empno로 조인한다
  4. GROUP BY mgr를 한다
정답 보기

3번 EMP를 별칭 두 개로 두 번 읽어 e.mgr = m.empno로 조인한다

같은 테이블을 사원 역할(e)과 관리자 역할(m)로 두 번 읽어 연결하는 셀프 조인이다. 같은 테이블이라 별칭이 꼭 필요하다.

Q2. SELECT a.ename, b.ename FROM emp a, emp b WHERE a.empno = b.mgr에서 b는 a의 무엇인가?

  1. 관리자
  2. 자기 자신
  3. 부하 직원
  4. 같은 부서 동료
정답 보기

3번 부하 직원

b의 MGR이 a의 사번이므로 a가 b의 관리자, 즉 b는 a의 부하다.

Q3. 셀프 조인에 대한 설명으로 틀린 것은?

  1. 한 테이블을 두 번 이상 읽는다
  2. 일반 조인과 문법이 같다
  3. 별칭을 생략해도 된다
  4. OUTER JOIN과 함께 쓸 수 있다
정답 보기

3번 별칭을 생략해도 된다

같은 테이블이라 별칭으로 구분해야 한다.

Q4. EMP 12명 중 MGR이 NULL인 사원이 1명이다. FROM emp e, emp m WHERE e.mgr = m.empno의 결과 행 수는?

  1. 10
  2. 11
  3. 12
  4. 144
정답 보기

2번 11

MGR이 NULL인 1명은 짝이 없어 빠지고 11행.

Q5. 셀프 조인에 반드시 필요한 것은?

  1. OUTER 키워드
  2. 다른 테이블 하나 더
  3. 같은 테이블에 서로 다른 별칭 두 개
  4. GROUP BY
정답 보기

3번 같은 테이블에 서로 다른 별칭 두 개

같은 테이블을 두 번 쓰므로 별칭으로 구분해야 한다.

Q6. 관리자가 없는 최상위 사원까지 결과에 넣으려면 어떤 조인을 쓰나?

  1. OUTER JOIN
  2. INNER JOIN
  3. NATURAL JOIN
  4. CROSS JOIN
정답 보기

1번 OUTER JOIN

mgr이 NULL이라 일반 셀프 조인에서는 빠진다.

헷갈리기 쉬운 O·X

셀프 조인은 자기 자신과 조인하므로 조인 조건이 필요 없다.

정답 보기

X 조인 조건이 없으면 12 × 12 카티션 곱이 된다.

계층 구조 데이터(사원-관리자)는 셀프 조인이나 계층형 질의로 조회할 수 있다.

정답 보기

O 단계가 깊으면 계층형 질의가 편하다.

셀프 조인에서는 두 별칭의 같은 열끼리만 비교할 수 있다.

정답 보기

X e.mgr = m.empno처럼 서로 다른 열도 비교한다.

함께 보면 좋은 개념