JOIN 종류 (INNER, LEFT, RIGHT, FULL OUTER, CROSS, SELF)
🔥 매회 출제 (priority 3)
🌱 왜 배우나
쇼핑몰에서 주문 번호는 주문 장부에, 고객 이름은 고객 명부에 따로 적혀 있다. 포장할 때는 두 장부를 맞춰 “홍길동 고객의 1234번 주문”으로 확인해야 한다. 데이터베이스도 똑같다. 정규화 때문에 “학생 정보”와 “수강 정보”가 서로 다른 표에 나뉘어 있어서, 성적표 한 장을 뽑으려면 두 표를 이어 붙여야 한다. 이 이어 붙이기가 바로 JOIN이다. 어느 쪽을 기준으로 하느냐에 따라 결과가 달라지기 때문에 여러 종류를 나눠서 배운다.
📖 핵심 개념
JOIN(조인)은 두 개 이상의 표를 공통 속성(예: 양쪽에 모두 있는 “학번” 열)을 기준으로 합쳐 하나의 결과를 만드는 연산이다. 이 공통 기준을 조인 조건이라 부른다.
조인 조건을 만족하는 행만 쓸지, 한쪽 표의 모든 행을 유지할지에 따라 종류가 갈린다. INNER JOIN은 양쪽이 모두 일치하는 행만 가져온다. OUTER JOIN은 한쪽 또는 양쪽 표의 모든 행을 살려 두고, 짝이 없으면 빈 자리를 NULL로 채운다.
정규화로 쪼갠 표들을 다시 연결해 “원하는 한 장의 보고서”로 되살리는 도구가 JOIN이라고 기억하면 된다.
🔍 시각화
표 A (학생) 표 B (수강)
┌────┬──────┐ ┌────┬──────┐
│학번│ 이름 │ │학번│ 과목 │
├────┼──────┤ ├────┼──────┤
│ 1 │ 김철 │ │ 1 │ 수학 │
│ 2 │ 이영 │ │ 1 │ 영어 │
│ 3 │ 박지 │ │ 4 │ 국어 │
└────┴──────┘ └────┴──────┘
INNER JOIN (학번 기준): 양쪽 다 있는 학번 1만
→ (1, 김철, 수학), (1, 김철, 영어)
LEFT JOIN (학생 기준): 학생 전부 + 일치하는 수강
→ (1, 김철, 수학), (1, 김철, 영어), (2, 이영, NULL), (3, 박지, NULL)
CROSS JOIN: 모든 조합 = 3 × 3 = 9행
↔️ 이웃 개념 구분
- INNER JOIN vs LEFT JOIN: INNER는 양쪽이 다 일치하는 행만 남긴다. LEFT는 왼쪽 표를 통째로 유지하고, 짝이 없는 자리는 오른쪽을 NULL로 채운다.
- NATURAL JOIN vs EQUI JOIN: NATURAL JOIN은 같은 이름의 열을 자동으로 조인 조건으로 쓴다. EQUI JOIN은
=연산자로 조건을 명시한다.
🔑 핵심 용어
- INNER JOIN: 양쪽 표에서 조인 조건이 맞는 행만 가져온다. 교집합 개념.
- LEFT (OUTER) JOIN: 왼쪽 표의 모든 행을 유지하고 오른쪽의 일치 행을 붙인다. 짝이 없으면 오른쪽은 NULL.
- RIGHT (OUTER) JOIN: 오른쪽 표의 모든 행을 유지하고 왼쪽의 일치 행을 붙인다. 짝이 없으면 왼쪽은 NULL.
- FULL OUTER JOIN: 양쪽 표의 모든 행을 다 가져온다. 짝이 없는 쪽은 NULL. 합집합 개념.
- CROSS JOIN: 조인 조건 없이 양쪽 표의 모든 행을 조합한다(카티션 곱, Cartesian Product). A 표 m행 × B 표 n행 = m×n행.
- SELF JOIN: 같은 표를 자기 자신과 조인한다. 별칭(Alias, 임시 이름)을 꼭 붙여 구분해야 한다. 사원-관리자 관계 조회가 대표 예.
✅ 스스로 가르쳐보기
학생 표 5행과 과목 표 4행을 손에 쥐었다고 상상해 보자. 친구에게 “INNER·LEFT·CROSS 세 가지 조인 결과의 행 수가 왜 서로 다른가”를 본인 문장으로 먼저 설명해 보고, 행 수를 직접 계산해 보자.
체크포인트:
- INNER JOIN이 “일치하는 행만” 남긴다고 말할 수 있는가
- LEFT JOIN에서 짝 없는 행의 오른쪽이 NULL로 채워지는 이유를 설명할 수 있는가
- CROSS JOIN 결과 행 수를 m×n으로 계산할 수 있는가
- SELF JOIN에서 별칭이 왜 필수인지 말할 수 있는가
🎯 기출 포인트
INNER JOIN과 OUTER JOIN의 차이, 특히 LEFT/RIGHT에서 NULL이 채워지는 위치를 정확히 이해해야 한다. CROSS JOIN의 결과 행 수(m×n)를 계산하는 문제가 나온다. **자연 조인(NATURAL JOIN)**은 같은 이름의 속성을 자동으로 조건으로 쓰고, **동등 조인(EQUI JOIN)**은
=연산자를 쓰는 조인이라는 차이도 구분하라.
🔗 연결 개념
- DDL 명령어 (CREATE, ALTER, DROP, TRUNCATE)
db-optimization-001