SQL OUTER JOIN과 SELF JOIN 가이드

유방현·2024년 10월 29일

SQL OUTER JOIN과 SELF JOIN 가이드

1. OUTER JOIN

OUTER JOIN은 SQL에서 두 테이블 간의 관계를 설정할 때, 한쪽 테이블에만 데이터가 있는 경우에도 모든 행을 포함할 수 있도록 도와주는 조인 방식입니다. INNER JOIN과 달리, 일치하지 않는 데이터도 함께 조회할 수 있는 것이 큰 특징입니다.

1.1 LEFT OUTER JOIN

-- 기본 구문
SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;

-- 예시: 모든 직원과 부서 정보 조회
SELECT e.empno, e.ename, d.dname
FROM emp e
LEFT JOIN dept d ON e.deptno = d.deptno;
  • 왼쪽 테이블(table1)의 모든 행 포함
  • 오른쪽 테이블(table2)의 일치하지 않는 데이터는 NULL

1.2 RIGHT OUTER JOIN

-- 기본 구문
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;

-- 예시: 모든 부서와 소속 직원 조회
SELECT d.deptno, d.dname, e.empno, e.ename
FROM emp e
RIGHT JOIN dept d ON e.deptno = d.deptno;
  • 오른쪽 테이블(table2)의 모든 행 포함
  • 왼쪽 테이블(table1)의 일치하지 않는 데이터는 NULL

2. SELF JOIN

SELF JOIN은 하나의 테이블을 스스로 조인하여 동일 테이블 내의 데이터를 결합할 때 사용하는 조인 방식입니다. SELF JOIN은 일반적으로 테이블 내의 두 행 간의 관계를 비교하거나, 계층 구조(예: 직원과 상사 관계)를 나타낼 때 유용합니다

2.1 기본 구문

-- 기본 구문
SELECT a.column, b.column
FROM table_name a
JOIN table_name b ON a.column = b.column;

2.2 직원-관리자 관계 예제

-- 기본 예제
SELECT 
    e.empno AS 직원번호,
    e.ename AS 직원이름,
    m.empno AS 상사번호,
    m.ename AS 상사이름
FROM emp e
LEFT JOIN emp m ON e.mgr = m.empno;

-- NULL 처리 추가
SELECT 
    e.empno AS 직원번호,
    e.ename AS 직원이름,
    IFNULL(m.ename, '관리자 없음') AS 관리자이름
FROM emp e
LEFT JOIN emp m ON e.mgr = m.empno;

3. 실무 활용 사례

3.1 OUTER JOIN 활용

  1. 누락된 데이터 확인
-- 부서가 없는 직원 확인
SELECT e.*
FROM emp e
LEFT JOIN dept d ON e.deptno = d.deptno
WHERE d.deptno IS NULL;
  1. 전체 데이터 조회
-- 모든 부서와 직원 수 확인
SELECT 
    d.dname,
    COUNT(e.empno) as 직원수
FROM dept d
LEFT JOIN emp e ON d.deptno = e.deptno
GROUP BY d.dname;

3.2 SELF JOIN 활용

  1. 조직도 구성
-- 3단계 조직도 구성
SELECT 
    e1.ename as 직원,
    e2.ename as 직속상사,
    e3.ename as 차상위상사
FROM emp e1
LEFT JOIN emp e2 ON e1.mgr = e2.empno
LEFT JOIN emp e3 ON e2.mgr = e3.empno;
  1. 계층 구조 분석
-- 부하 직원 수 확인
SELECT 
    m.ename as 관리자,
    COUNT(e.empno) as 부하직원수
FROM emp e
RIGHT JOIN emp m ON e.mgr = m.empno
GROUP BY m.ename;

4. 주의사항 및 팁

4.1 OUTER JOIN 사용 시

  1. NULL 처리 주의
  2. 조인 방향(LEFT/RIGHT) 선택 시 데이터 완전성 고려
  3. 성능 최적화를 위한 인덱스 활용

4.2 SELF JOIN 사용 시

  1. 명확한 별칭 사용
  2. 순환 참조 주의
  3. 깊이가 깊어질 경우 성능 고려
  4. LEFT JOIN 사용하여 누락 데이터 방지

0개의 댓글