셀프 조인
쉽게 말하면
셀프 조인은 한 표를 두 번 불러와 자기 자신과 잇는 거예요. 사원 표에 '내 관리자 번호' 칸이 있으면, 같은 사원 표를 한 번 더 불러와 관리자 이름을 찾아요. 같은 표를 두 번 쓰니까 별명(별칭)을 달리 붙여 어느 쪽이 사원이고 어느 쪽이 관리자인지 구분해요.
시험용 정의
셀프 조인(Self Join)은 한 테이블을 별칭을 달리해 두 번 이상 읽고 자기 자신과 조인하는 것이다. 한 테이블 안의 열이 같은 테이블의 다른 행을 가리킬 때(사원.관리자사번 → 사원.사번) 쓴다. 문법은 일반 조인과 같고, 같은 테이블이라 별칭으로 역할을 구분해야 한다.
비유로 이해하기
학급 명단 한 장을 복사해 두 장으로 만드는 것이다. 한 장은 '학생' 명단, 다른 한 장은 '짝꿍' 명단으로 보고 "짝꿍 번호 = 학생 번호"로 맞춰 읽는다.
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| MGR | EMP 테이블에서 그 사원의 관리자 사번. 같은 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
- 단계가 깊은 트리 전체를 따라가려면 셀프 조인을 계속 붙이기보다 계층형 질의가 편하다
시험에 이렇게 나와요
- 셀프 조인은 같은 테이블에 별칭 두 개 필수
- 조인 방향(e.mgr = m.empno)에 따라 관리자/부하 역할이 바뀜
- 최상위 관리자는 일반 셀프 조인에서 빠짐 → OUTER JOIN
- 셀프 조인 결과 표를 보고 SQL 고르기
출제 범위·공식 안내 기반
확인 문제
Q1. EMP의 MGR 열은 관리자의 사번(EMPNO)이다. 사원 이름과 관리자 이름을 함께 보려면?
- EMP와 DEPT를 조인한다
- MGR 열을 그대로 출력한다
- EMP를 별칭 두 개로 두 번 읽어 e.mgr = m.empno로 조인한다
- 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의 무엇인가?
- 관리자
- 자기 자신
- 부하 직원
- 같은 부서 동료
정답 보기
3번 부하 직원
b의 MGR이 a의 사번이므로 a가 b의 관리자, 즉 b는 a의 부하다.
Q3. 셀프 조인에 대한 설명으로 틀린 것은?
- 한 테이블을 두 번 이상 읽는다
- 일반 조인과 문법이 같다
- 별칭을 생략해도 된다
- OUTER JOIN과 함께 쓸 수 있다
정답 보기
3번 별칭을 생략해도 된다
같은 테이블이라 별칭으로 구분해야 한다.
Q4. EMP 12명 중 MGR이 NULL인 사원이 1명이다. FROM emp e, emp m WHERE e.mgr = m.empno의 결과 행 수는?
- 10
- 11
- 12
- 144
정답 보기
2번 11
MGR이 NULL인 1명은 짝이 없어 빠지고 11행.
Q5. 셀프 조인에 반드시 필요한 것은?
- OUTER 키워드
- 다른 테이블 하나 더
- 같은 테이블에 서로 다른 별칭 두 개
- GROUP BY
정답 보기
3번 같은 테이블에 서로 다른 별칭 두 개
같은 테이블을 두 번 쓰므로 별칭으로 구분해야 한다.
Q6. 관리자가 없는 최상위 사원까지 결과에 넣으려면 어떤 조인을 쓰나?
- OUTER JOIN
- INNER JOIN
- NATURAL JOIN
- CROSS JOIN
정답 보기
1번 OUTER JOIN
mgr이 NULL이라 일반 셀프 조인에서는 빠진다.
헷갈리기 쉬운 O·X
셀프 조인은 자기 자신과 조인하므로 조인 조건이 필요 없다.
정답 보기
X 조인 조건이 없으면 12 × 12 카티션 곱이 된다.
계층 구조 데이터(사원-관리자)는 셀프 조인이나 계층형 질의로 조회할 수 있다.
정답 보기
O 단계가 깊으면 계층형 질의가 편하다.
셀프 조인에서는 두 별칭의 같은 열끼리만 비교할 수 있다.
정답 보기
X e.mgr = m.empno처럼 서로 다른 열도 비교한다.