💡 핵심 인사이트
조인(Join, $\bowtie$)은 흩어져 있는 두 개 이상의 릴레이션을 '공통된 속성'을 연결고리로 삼아 하나의 릴레이션으로 합치는 연산입니다.
관계형 데이터베이스(RDB)가 다른 DB 모델과 구별되는 가장 강력하고 핵심적인 기능입니다.


Ⅰ. 조인(Join) 연산의 개념

데이터베이스는 이상 현상(중복)을 막기 위해 정규화를 거쳐 테이블을 여러 개로 쪼개놓습니다(예: 학생 테이블, 학과 테이블). 하지만 사용자는 이를 합친 종합적인 정보를 원합니다. 이때 **두 테이블 간의 공통 속성(주로 기본키와 외래키)**을 기준으로 튜플들을 짝지어 결합하는 연산이 조인입니다.

  • 표기법: $R \bowtie_{조건} S$
  • 기본 원리: 조인은 내부적으로 카테시안 프로덕트(Cartesian Product, 모든 경우의 수 결합)를 수행한 후, 조인 조건(SELECT)을 만족하는 행만 남기는 것과 같습니다. ($R \bowtie_{조건} S = \sigma_{조건}(R \times S)$)

Ⅱ. 조인의 종류

1. 세타 조인 (Theta Join, $\theta$-Join)

조인 조건에 $=, \neq, >, <, \ge, \le$ 등의 비교 연산자($\theta$)를 사용하는 가장 일반적인 조인입니다.

2. 동등 조인 (Equi Join)

세타 조인 중에서 조건이 오직 등호(=)인 조인을 말합니다. 두 테이블에서 값이 정확히 같은 행들만 결합합니다.

  • 문제점: 동등 조인을 하면 결과 테이블에 기준이 된 공통 속성이 두 번 중복해서 나타납니다 (예: 학생.학과코드, 학과.학과코드).

3. 자연 조인 (Natural Join, $\bowtie_N$)

동등 조인의 결과에서 중복되는 속성 하나를 제거하여 한 번만 나타나게 한 조인입니다. 실무에서 "조인"이라고 하면 보통 이 자연 조인을 의미합니다.

[ 학생 ]                      [ 학과 ]
학번 | 이름 | 학과코드        학과코드 | 학과명
-----|------|----------       ---------|--------
 1   | 킴   |  A               A       | 컴공
 2   | 리   |  B               B       | 경영

▶ 자연 조인 결과 (학생 ⋈ 학과)
학번 | 이름 | 학과코드 | 학과명
-----|------|----------|-------
 1   | 킴   |  A       | 컴공
 2   | 리   |  B       | 경영
*(학과코드가 한 번만 출력됨)*

4. 외부 조인 (Outer Join)

자연 조인을 하면 짝을 찾지 못한 튜플(예: 아직 소속 학과가 없는 신입생)은 결과에서 아예 누락됩니다. 이를 방지하기 위해 짝이 없어도 기준이 되는 테이블의 정보는 무조건 널(NULL) 값을 채워서라도 살려두는 조인입니다.

  • Left Outer Join ($⟕$): 왼쪽 릴레이션의 모든 튜플을 보존.
  • Right Outer Join ($⟖$): 오른쪽 릴레이션의 모든 튜플을 보존.
  • Full Outer Join ($⟗$): 양쪽 모두 보존.

📢 섹션 요약 비유: 조인은 찢어진 보물지도의 왼쪽 조각(학생)과 오른쪽 조각(학과)을 서로 겹치는 그림(학과코드)을 기준으로 테이프를 붙여 하나의 온전한 지도로 복원하는 작업입니다.