조인을 집합으로 보면: INNER vs OUTER
조인을 벤 다이어그램(집합)으로 생각하면 종류별 차이가 한눈에 들어옵니다. 두 테이블 A, B가 있다고 할 때:
INNER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN
A ∩ B A 전체 + 교집합 교집합 + B 전체 A ∪ B (합집합)
(A)(B) (A)(B) (A)(B) (A)(B)
▓▓ ██▓▓ ▓▓██ ██▓▓██
교집합만 A는 다 살리고 B는 다 살리고 둘 다 다 살리고
매칭 없으면 NULL 매칭 없으면 NULL 없는 쪽은 NULL- INNER JOIN: 양쪽에 다 매칭되는 행만 남깁니다. 교집합입니다.
- LEFT OUTER JOIN: 왼쪽(기준) 테이블은 무조건 다 남기고, 오른쪽은 매칭되면 채우고 안 되면 NULL로 둡니다.
- RIGHT OUTER JOIN: LEFT의 반대. 오른쪽 테이블을 기준으로 전부 살립니다.
RIGHT OUTER JOIN은 사실 기준 테이블 순서만 바꾸면LEFT OUTER JOIN으로 똑같이 쓸 수 있어서, 실무에서는 LEFT만 통일해서 쓰고 RIGHT은 잘 안 쓰는 경우가 많습니다. - FULL OUTER JOIN: 양쪽 테이블의 모든 행을 다 살립니다(합집합). 매칭이 안 되는 쪽은 NULL로 채웁니다. 사실상 "기준 테이블"이라는 개념 자체가 의미 없어집니다.
sql
-- 오른쪽 외부 조인
SELECT Star.Name, Dep.Name
FROM Star
RIGHT OUTER JOIN Dep ON Star.DepNo = Dep.DepNo;
-- 완전 외부 조인 (합집합)
SELECT Star.Name, Dep.Name
FROM Star
FULL OUTER JOIN Dep ON Star.DepNo = Dep.DepNo;그 밖에 조인 방식을 부르는 이름 몇 가지도 알아두면 좋습니다.
- 등가 조인(Equi Join):
=연산자로 매칭하는 가장 흔한 조인 (지금까지 본 예시가 전부 이 방식) - 비등가 조인(Non-Equi Join):
=가 아닌<,BETWEEN등으로 매칭하는 조인 (예: 급여가 어떤 등급 구간에 속하는지 찾기) - 셀프 조인(Self Join): 같은 테이블을 자기 자신과 조인하는 것. 사원 테이블에서 "이 사원의 상사 이름"을 찾을 때처럼, 자기 참조 관계가 있는 테이블에서 씁니다.
참고: 개인 Notion 학습 노트