DBMS/개념

19_ 조인(Join)

seungwon-1 2025. 10. 16. 12:42

조인은 관계형 데이터베이스(RDBMS) 에서 가장 중요한 개념 중 하나다.
여러 테이블로 나누어 저장된 데이터를 논리적으로 연결해 하나의 결과로 합치는 역할을 한다.
즉, 데이터의 정규화를 유지하면서도 필요한 정보를 쉽게 조회할 수 있게 해준다.

 

1. INNER JOIN — 일치하는 데이터만 추출

특징:
두 테이블 간의 공통된 데이터(조인 조건을 만족하는 행) 만 결과에 포함한다.
가장 일반적이며, 데이터의 정확한 매칭 관계를 찾을 때 사용된다.

SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;

결과:

  • 부서가 있는 직원만 표시됨
  • 부서가 없는 직원, 직원이 없는 부서는 제외됨

사용 예시:
직원과 부서 정보를 함께 보여주고 싶을 때
(예: “각 직원이 속한 부서 이름을 출력하시오”)

 

2. OUTER JOIN — 일치하지 않는 데이터도 포함

OUTER JOIN은 조인 조건을 만족하지 않아도 특정 테이블의 데이터를 결과에 포함한다.
누락된 데이터까지 함께 보고 싶을 때 사용한다.
종류는 LEFT, RIGHT, FULL 세 가지다.

 

(1) LEFT OUTER JOIN — 왼쪽 테이블 기준

특징:
왼쪽 테이블의 모든 행을 포함하고, 오른쪽 테이블의 데이터는 일치하는 경우에만 포함한다.
일치하지 않으면 NULL로 표시된다.

SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON e.department_id = d.department_id;

결과:

  • 모든 직원이 표시됨
  • 부서가 없는 직원은 department_name이 NULL로 표시됨

사용 예시:
모든 직원 목록을 보여주되, 부서 정보가 없으면 NULL로 표시하고 싶을 때

 

(2) RIGHT OUTER JOIN — 오른쪽 테이블 기준

특징:
오른쪽 테이블의 모든 행을 포함하고, 왼쪽 테이블의 데이터는 일치하는 경우에만 표시한다.

SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id;

결과:

  • 모든 부서가 표시됨
  • 직원이 없는 부서는 employee_id, first_name이 NULL로 표시됨

사용 예시:
모든 부서를 표시하면서, 소속 직원이 없는 부서도 함께 보고 싶을 때

 

(3) FULL OUTER JOIN — 양쪽 테이블의 모든 데이터 포함

특징:
양쪽 테이블의 모든 행을 결과에 포함시킨다.
일치하지 않는 행은 NULL로 채운다.

SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON e.department_id = d.department_id;

결과:

  • 모든 직원과 모든 부서가 표시됨
  • 부서 없는 직원, 직원 없는 부서 모두 NULL로 표시됨

사용 예시:
직원과 부서 간의 전체 관계를 한 번에 확인하고 싶을 때

 

 

3. CROSS JOIN — 가능한 모든 조합 생성

특징:
두 테이블의 모든 행 조합(카테시안 곱) 을 생성한다.
조건문이 없으므로, 결과의 행 수는 두 테이블 행 수의 곱이 된다.

SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
CROSS JOIN departments d;

결과:

  • 모든 직원 × 모든 부서의 조합이 생성됨

주의:
테이블 크기가 크면 결과가 매우 커지므로 실무에서는 주의해서 사용해야 한다.

사용 예시:
모든 가능한 조합을 테스트하거나, 임시 데이터셋을 만들 때

 

4. SELF JOIN — 같은 테이블 간의 관계 탐색

특징:
하나의 테이블을 자기 자신과 조인하는 방식이다.
계층 구조나 상하 관계(예: 직원 ↔ 관리자)를 표현할 때 자주 사용된다.

SELECT e1.employee_id, e1.first_name, e2.first_name AS manager_name
FROM employees e1
LEFT JOIN employees e2
ON e1.manager_id = e2.employee_id;

결과:

  • 각 직원과 그 직원의 관리자가 함께 표시됨
  • 관리자가 없는 경우(예: CEO)는 manager_name이 NULL로 표시됨

사용 예시:
“직원과 그 직원의 상사를 함께 출력하시오.”

 

조인의 선택 기준과 중요성

조인 유형포함 범위주요 사용 목적
INNER JOIN 일치하는 행만 두 테이블의 관계가 확실할 때
LEFT JOIN 왼쪽 전체 + 오른쪽 일치 기준 테이블의 모든 데이터 유지
RIGHT JOIN 오른쪽 전체 + 왼쪽 일치 참조 테이블의 전체 데이터 유지
FULL JOIN 양쪽 전체 전체 관계를 모두 파악할 때
CROSS JOIN 모든 조합 테스트/통계용 데이터 생성
SELF JOIN 동일 테이블 계층 구조 표현 (예: 직원-관리자)

 

성능과 최적화 고려

조인 연산은 데이터베이스 성능에 큰 영향을 미친다.
따라서 다음과 같은 점들을 반드시 고려해야 한다.

  1. 인덱스(Index) — 조인 조건으로 사용되는 컬럼에 인덱스를 생성하면 검색 속도 향상
  2. 조인 순서 최적화 — 작은 테이블을 먼저 조인하면 효율적
  3. 불필요한 컬럼 제거 — SELECT * 대신 필요한 컬럼만 명시
  4. 조건 필터링 — WHERE 절을 적극적으로 활용해 데이터 범위 축소

'DBMS > 개념' 카테고리의 다른 글

21_ 집합 연산자  (0) 2025.10.20
20_ 서브쿼리  (0) 2025.10.18
18_ 조인(Join)과 서브쿼리(Subquery)  (0) 2025.10.14
17_ 뷰(view)  (0) 2025.10.11
16_ 트랜잭션 (Transaction)  (0) 2025.10.09