티스토리 뷰

728x90
반응형

 

셀프 조인이란 무엇인가?

먼저 개념부터 정리해보자.
셀프 조인(Self Join)하나의 테이블을 자기 자신과 조인하는 것을 말한다.
즉, 같은 테이블을 두 번 불러와서 서로 연결하는 거다.
조인이라고 하면 원래는 두 개의 다른 테이블을 엮는다고 생각하기 쉽지만, 가끔은 같은 테이블 안에서 서로 연결해야 할 때가 있다.
그럴 때 셀프 조인을 쓰는 거다.

 


 

셀프 조인이 필요한 상황

셀프 조인은 계층적 관계를 표현하거나, 같은 테이블 내의 값들을 비교할 때 주로 쓰인다. 예시를 들어보자.

 

1. 상사-직원 관계 (계층 구조)

가장 대표적인 예가 상사-직원 관계다.
아래처럼 EMPLOYEE라는 테이블이 있다고 해보자.

 

EMP_ID EMP_NAME MANAGER_ID
1 홍길동 NULL
2 이몽룡 1
3 성춘향 1
4 김철수 2

 

  • MANAGER_ID는 직원의 상사의 ID를 나타낸다.

 

예를 들어 각 직원이 누구의 부하인지 알아보고 싶다면,
자기 자신과 같은 테이블을 조인해야 한다.
왜냐면 상사의 이름도 EMPLOYEE 테이블 안에 있기 때문이다.

이걸 SQL로 어떻게 쓸까?

 

SELECT
    E.EMP_NAME AS EMPLOYEE,
    M.EMP_NAME AS MANAGER
FROM
    EMPLOYEE E
LEFT JOIN
    EMPLOYEE M
    ON E.MANAGER_ID = M.EMP_ID;
  • EMPLOYEE 테이블을 E라는 이름으로 불러오고,
  • 똑같은 EMPLOYEE 테이블을 M이라는 이름으로 한 번 더 불러온다.
  • E의 MANAGER_ID와 M의 EMP_ID를 연결한다.

 

실행 결과는 아래처럼 나온다.

 

EMPLOYEE MANAGER
홍길동 NULL
이몽룡 홍길동
성춘향 홍길동
김철수 이몽룡
 

이렇게 하면 같은 테이블 안의 계층 구조를 풀어낼 수 있다.

 


 

2. 같은 테이블의 값 비교

또 다른 예시를 들어보자.
같은 테이블 안에서 특정 조건을 만족하는 쌍(pair) 을 찾고 싶을 때가 있다.

예를 들어 PRODUCT 테이블이 있다고 하자.

 

PROD_ID PROD_NAME PRICE
1 상품A 1000
2 상품B 2000
3 상품C 1000
4 상품D 3000

 

같은 가격의 상품끼리 묶어보고 싶다면 어떻게 할까?
이때도 셀프 조인이 필요하다.

 

SELECT
    P1.PROD_NAME AS PRODUCT_1,
    P2.PROD_NAME AS PRODUCT_2,
    P1.PRICE
FROM
    PRODUCT P1
JOIN
    PRODUCT P2
    ON P1.PRICE = P2.PRICE
   AND P1.PROD_ID < P2.PROD_ID;

 

  • PRODUCT 테이블을 두 번 불러와서 P1, P2라는 별칭을 준다.
  • 가격이 같은지 비교한다.
  • 같은 쌍이 두 번 나오지 않도록 P1.PROD_ID < P2.PROD_ID 조건을 추가한다.

결과는 이렇게 나온다.

PRODUCT_1 PRODUCT_2 PRICE
상품A 상품C 1000

 


 

셀프 조인의 주의할 점

셀프 조인을 쓸 때 몇 가지 주의해야 할 점이 있다.

  1. 별칭(Alias)을 꼭 써야 한다
    • 같은 테이블을 두 번 불러오기 때문에 이름 충돌이 일어난다.
    • 별칭을 안 쓰면 어떤 컬럼이 어느 테이블에서 왔는지 헷갈린다.
  2. 카디널리티 주의
    • 조인 조건이 잘못되면 데이터가 기하급수적으로 늘어날 수 있다.
    • 특히 계층 구조를 풀 때 잘못 걸면 자기 자신과 무한히 매칭되기도 하니 조심하자.

 


 

셀프 조인을 언제 쓰면 좋은가?

정리해보자.

  • 상사-부하 관계, 부서-상위 부서 처럼 계층 구조를 풀어야 할 때
  • 같은 테이블 안에서 특정 조건을 만족하는 쌍을 찾을 때
  • 과거와 현재 데이터를 같은 테이블 안에서 비교해야 할 때

이럴 때 셀프 조인이 빛을 발한다.

 


마무리하며

셀프 조인은 처음 들으면 조금 낯설지만, 사실 엄청 유용한 기법이다.
같은 테이블 안에서 관계를 찾아야 할 때가 은근히 많다.
이럴 때 셀프 조인을 쓰면 깔끔하고 효율적인 SQL을 작성할 수 있다.

꼭 기억하자.

 

셀프 조인은 같은 테이블을 두 번 불러와서 서로 연결하는 것이다.
별칭을 써야 하고, 조인 조건을 잘 정해야 한다.

 

이제 다음에 계층 구조나 테이블 내 값 비교가 필요할 때, 셀프 조인을 자신 있게 써보자!

 

 

728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함
반응형
250x250