웹개발/SQL(mySQL)

MySQL - JOIN 이해하기

bergerac 2025. 6. 19. 09:11

조인이란?

데이터베이스에서 JOIN은 두 개 이상의 테이블을 서로 결합해 하나의 결과를 생성하는 핵심 기능이다. 공통된 열(Column)을 기준으로 데이터를 연결하고, 각 테이블이 단독으로는 표현할 수 없는 복합적인 정보를 한 번에 조회할 수 있도록 도와준다. MySQL에서 JOIN은 복잡한 비즈니스 로직을 구현할 때 자주 사용되므로, 그 종류와 특징을 명확히 이해하는 것이 중요하다

1. JOIN의 필요성

  • 분리된 테이블을 논리적으로 연결해 데이터 중복을 최소화
  • ERD(Entity-Relationship Diagram)의 관계 모델을 그대로 SQL로 표현
  • 복합 조건을 만족하는 결과를 효율적으로 추출

2. JOIN의 종류

MySQL에서는 대표적으로 네 가지 JOIN을 지원한다. 내부 조인, 외부 조인, 상호 조인, 자체 조인이다.

내부 조인 (INNER JOIN)

 

  • 정의
    • 두 테이블의 조건에 일치하는 행(Row)만 결과로 출력
    • 집합 연산 관점에서 교집합(∩)과 동일
  • 문법
SELECT A.열1, B.열2
  FROM 테이블A A
INNER JOIN 테이블B B
  ON A.공통열 = B.공통열;

 

  • 예제
    • 직원 테이블 employees와 부서 테이블 departments를 조인해 직원명과 부서명을 출력
SELECT E.employee_name, D.department_name
  FROM EMPLOYEES E
INNER JOIN DEPARTMENTS D
  ON E.department_id = D.department_id;
  • 특징
    • 일치하는 데이터가 없으면 해당 행은 결과에서 제외
    • NULL이 아닌 값만 결합

외부 조인(OUTER JOIN)

외부 조인은 내부 조인과 달리 한쪽 테이블에만 존재하는 행도 결과에 포함한다. MySQL에서는 LEFT JOIN과 RIGHT JOIN을 지원하지만 풀 조인은 직접 구현해야 한다

  • LEFT JOIN (왼쪽 외부 조인)
    • 왼쪽 테이블의 모든 행을 결과에 포함
    • 오른쪽 테이블에 매칭되는 데이터가 없으면 NULL로 채움
     
SELECT E.employee_name, D.department_name
  FROM EMPLOYEES E
LEFT JOIN DEPARTMENTS D
  ON E.department_id = D.department_id;
  • RIGHT JOIN (오른쪽 외부 조인)
    • 오른쪽 테이블의 모든 행을 결과에 포함
    • 왼쪽에 매칭이 없으면 NULL로 채움
SELECT E.employee_name, D.department_name
  FROM EMPLOYEES E
RIGHT JOIN DEPARTMENTS D
  ON E.department_id = D.department_id;
  • FULL OUTER JOIN (전체 외부 조인)
    • MySQL은 직접 지원하지 않음
    • UNION으로 LEFT JOIN과 RIGHT JOIN 결과를 합쳐 구현
SELECT * FROM EMPLOYEES E
LEFT JOIN DEPARTMENTS D ON E.department_id = D.department_id
UNION
SELECT * FROM EMPLOYEES E
RIGHT JOIN DEPARTMENTS D ON E.department_id = D.department_id;
  • 특징
    • NULL 포함 여부를 통해 결측치 확인 가능
    • 누락된 관계를 분석할 때 유용

상호 조인(CROSS JOIN)

  • 정의
    • 두 테이블의 모든 조합(카테시안 곱, Cartesian Product)을 반환
  • 문법
SELECT A.*, B.*
  FROM 테이블A A
CROSS JOIN 테이블B B;
  • 예제
    products 테이블과 colors 테이블을 조합해 모든 상품-색상 조합 생성
SELECT P.product_name, C.color_name
  FROM PRODUCTS P
CROSS JOIN COLORS C;
  • 특징
    • 결과 행 수 = A의 행 수 × B의 행 수
    • 주로 브루트포스 체크, 조합 생성 시 사용
    • 조건 없이 모든 조합을 생성하므로 주의

 자체 조인(SELF JOIN)

  • 정의
    • 하나의 테이블을 두 개 이상의 별칭(Alias)으로 참조해 조인
    • 자기 자신과 비교하는 구조
  • 문법
SELECT A.컬럼1, B.컬럼2
  FROM 테이블 A
JOIN 테이블 B
  ON A.비교열 = B.비교열;
  • 예제
    직원 테이블에서 직원과 매니저 관계 조회
SELECT E.employee_name     AS 직원,
       M.employee_name     AS 매니저
  FROM EMPLOYEES E
LEFT JOIN EMPLOYEES M
  ON E.manager_id = M.employee_id;
  • 특징
    • 계층형 데이터(부모-자식, 선후 관계) 조회에 적합
    • 자기 참조 컬럼을 이용해 재귀적 관계 표현

성능 최적화 팁

  • 인덱스 활용
    • ON 절에 사용되는 컬럼에 인덱스를 생성해 조회 속도 개선
    • Composite 인덱스로 다중 조건 처리
  • 조인 순서
    • 작은 결과를 먼저 필터링해 처리량 감소
    • 실행 계획(EXPLAIN) 확인 후 순서 조정
  • 불필요한 컬럼 제거
    • SELECT * 대신 필요한 컬럼만 지정
    • 네트워크 전송량 및 메모리 사용량 절감
  • 조인 유형 선택
    • OUTER JOIN은 처리 비용이 크므로 필요한 경우에만 사용
    • 가능한 INNER JOIN으로 변환 검토

'웹개발 > SQL(mySQL)' 카테고리의 다른 글

MySQL 형변환  (0) 2025.06.21
MySQL에서 변수 사용하기  (1) 2025.06.20
MySQL SubQuery 활용  (1) 2025.06.18
MySQL SELECT 문 사용방법  (0) 2025.06.17
MySQL DML 문법 (INSERT, UPDATE, DELETE)  (0) 2025.06.16