변수의 기록

(데이터베이스)SQL 조인 정리 본문

CS지식/데이터베이스 (Database)

(데이터베이스)SQL 조인 정리

불광동 물주먹 2025. 5. 14. 23:36

SQL 조인의 의미와 종류: 깊이 있는 정리

1. 조인의 본질: 왜 필요한가?

SQL에서 조인(JOIN)은 둘 이상의 테이블을 논리적으로 연결하여 하나의 결과 집합을 만드는 연산입니다.
이는 정규화된 데이터 모델에서 분리된 정보를 결합할 때 필수적이며, 관계형 데이터베이스의 핵심 개념 중 하나입니다.


2. 조인 문법: Implicit vs Explicit

2.1 Implicit Join (암시적 조인, 구식 문법)

SELECT * 
FROM employees e, departments d
WHERE e.dept_id = d.id
  AND e.salary > 5000;
  • FROM 절에 테이블 나열만 하고, WHERE 절에서 조인 조건을 명시
  • 선택 조건과 조인 조건이 혼재되어 가독성이 떨어짐
  • 조인 조건 빠뜨리는 실수가 잦아, 실수로 cross join이 발생할 수 있음
  • Oracle 8i 이전 구버전에서 주로 사용 (오라클 조인)

실무에서는 가독성 및 유지보수 문제로 사용 지양


2.2 Explicit Join (명시적 조인)

SELECT * 
FROM employees e
JOIN departments d ON e.dept_id = d.id
WHERE e.salary > 5000;
  • JOIN 키워드를 이용해 조인 대상과 조인 조건을 명확히 구분
  • ON 절에 조인 조건 명시 → 가독성과 안정성 향상
  • 복잡한 다중 조인 시에도 구조가 명확히 드러남
  • 안시 조인 (ANSI JOIN)

현재 대부분의 DBMS와 SQL 작성 스타일에서 권장되는 방식


3. 조인의 종류

3.1 INNER JOIN (내부 조인)

SELECT * 
FROM employees e
INNER JOIN departments d ON e.dept_id = d.id;
  • 조인 조건을 만족하는 행만 결과에 포함
  • 조건을 만족하지 않는 행은 제외
  • JOIN, INNER JOIN은 같은 의미 (INNER는 생략 가능)
  • NULL 값을 포함한 조건 비교는 실패 → 해당 행은 포함되지 않음

3.2 OUTER JOIN (외부 조인)

  • 조인 조건을 만족하지 않는 행도 포함시켜주는 방식

종류는 3가지:

3.2.1 LEFT OUTER JOIN

SELECT *
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.id;
  • 왼쪽 테이블의 모든 행 포함, 오른쪽이 없으면 NULL

3.2.2 RIGHT OUTER JOIN

SELECT *
FROM employees e
RIGHT JOIN departments d ON e.dept_id = d.id;
  • 오른쪽 테이블의 모든 행 포함, 왼쪽이 없으면 NULL

3.2.3 FULL OUTER JOIN (PostgreSQL, Oracle 지원)

SELECT *
FROM employees e
FULL OUTER JOIN departments d ON e.dept_id = d.id;
  • 양쪽 테이블 모두 포함. 없는 쪽은 NULL

3.3 EQUI JOIN

  • 조인 조건에 동등 연산자(=) 를 사용하는 조인
SELECT *
FROM employees e
JOIN departments d ON e.dept_id = d.id;

 

두 가지 해석 방식이 있음:

  1. = 연산자가 쓰이면 무조건 EQUI JOIN (INNER/OUTER 관계 없음)
  2. INNER JOIN + = 연산 조합만 EQUI JOIN으로 한정하는 해석도 있음 (학문적 관점)

3.4 USING 절

SELECT *
FROM employees
JOIN departments USING (dept_id);
  • 양쪽 테이블에 동일한 이름의 컬럼이 있을 경우
  • 조인 후 해당 컬럼은 하나로 축약됨 (별칭 없이 사용 가능)
  • INNER JOIN, OUTER JOIN 모두에서 사용 가능

단, 컬럼명이 같은 경우에만 사용 가능. 컬럼명이 다르면 ON 절 사용


3.5 NATURAL JOIN

SELECT *
FROM employees
NATURAL JOIN departments;
  • 두 테이블 간 동일한 컬럼 이름을 기준으로 자동으로 EQUI JOIN 수행
  • JOIN 조건을 명시하지 않음
  • 내부적으로는 USING과 유사하게 작동
  • 단점: 명시적이지 않아 예기치 않은 컬럼 조인 발생 위험

3.6 CROSS JOIN (카테시안 곱)

-- 명시적
SELECT * 
FROM employees CROSS JOIN departments;

-- 암시적 (구식 문법)
SELECT * 
FROM employees, departments;
  • 모든 조합 반환 → n x m 개의 결과 생성
  • 조인 조건 없음
  • 실수로 발생하면 결과 폭발 가능

3.7 SELF JOIN

SELECT e1.name, e2.name AS manager
FROM employees e1
JOIN employees e2 ON e1.manager_id = e2.id;
  • 같은 테이블을 자기 자신과 조인
  • 별칭(alias)을 사용하여 두 개로 나누어 사용
  • 조직도, 계층 구조 등에서 자주 사용

4. 정리 요약표


 

조인 유형  포함 행 조인 조건  키워드 예시
INNER JOIN 조건 만족하는 양쪽 행만 포함 필수 JOIN, INNER JOIN
LEFT OUTER JOIN 왼쪽 테이블 전체 + 오른쪽 조건 행 필수 LEFT JOIN, LEFT OUTER JOIN
RIGHT OUTER JOIN 오른쪽 전체 + 왼쪽 조건 행 필수 RIGHT JOIN
FULL OUTER JOIN 양쪽 전체 포함 필수 FULL OUTER JOIN
EQUI JOIN = 조건 사용 조인 = JOIN ON A.id = B.id
USING 동일 컬럼 기준 조인 (축약형) 자동 추론 JOIN USING (id)
NATURAL JOIN 동일 컬럼명 자동 조인 자동 추론 NATURAL JOIN
CROSS JOIN 모든 조합 반환 없음 CROSS JOIN, A, B
SELF JOIN 자기 자신과 조인 필요 FROM A a1 JOIN A a2 ON ...
 

5. 마무리

SQL 조인은 단순한 테이블 결합을 넘어서, 데이터의 관계와 의미를 명확하게 구조화하는 도구입니다.
특히 JOIN의 종류와 문법적 차이를 정확히 이해하면, 복잡한 데이터 모델도 명확하고 실수 없이 다룰 수 있습니다.
실무에서는 explicit join, USING, SELF JOIN, OUTER JOIN 등 다양한 조인 패턴을 복합적으로 사용하므로, 각 개념의 특징을 정확히 이해하고 선택적으로 활용하는 것이 중요합니다.