조인은 두 입력의 행을 조건에 따라 짝짓는다. 한 행에 여러 짝이 있으면 결과도 그만큼 늘어난다.
이 예제에서 책 1번은 대출 이력이 2개, 2번은 1개이고 3·4번은 없다. INNER JOIN 결과는 대출이 있는 짝 3행이다. 책을 왼쪽에 둔 LEFT JOIN은 미일치 책도 남겨 총 5행이다.
미일치 행의 대출 열에는 NULL이 채워진다. 조인 뒤 WHERE l.loan_id IS NULL로 대출 이력이 없는 책 3·4번을 찾을 수 있다. 이 예제의 loan_id는 기본키여서 원래 NULL이 없다는 조건을 사용한다.
- 01 →
왼쪽 행
- 02 →
일치하는 오른쪽 행
- 03 →
짝마다 결과 한 행
- 04
없으면 보충 행
같은 상황에서 비교하기
| 개념 | 기준 | 확인할 점 |
|---|---|---|
| INNER | 일치한 짝만 | 현재 3행 |
| LEFT OUTER | 왼쪽 미일치 행도 보존 | 현재 5행 |
| CROSS | 모든 조합 | 현재 두 표는 4×3=12행 |
도서관 예제로 따라가기
SELECT b.book_id, l.loan_id
FROM books b
LEFT JOIN loans l ON l.book_id = b.book_id
ORDER BY b.book_id, l.loan_id;| book_id | loan_id |
|---|---|
| 1 | 11 |
| 1 | 12 |
| 2 | 13 |
| 3 | NULL |
| 4 | NULL |
같은 책이 여러 대출과 짝지어지면 책번호가 결과에서 반복된다.
공통 예제 데이터 보기
| book_id | title | shelf_code | pages |
|---|---|---|---|
| 1 | SQL 입문 | DB | 120 |
| 2 | 설계 노트 | SW | 200 |
| 3 | 관계 모델 | DB | NULL |
| 4 | 분산 읽기 | NULL | 160 |
| loan_id | book_id |
|---|---|
| 11 | 1 |
| 12 | 1 |
| 13 | 2 |
내 말로 설명해 보기
LEFT JOIN 결과가 책 수보다 많은 이유와 NULL 행의 의미를 설명해 보자.
설명 예시 확인
책 1번이 두 대출에 연결되어 두 행이 된다. 책 3·4번은 짝이 없어서 대출 쪽 열이 NULL인 보충 행으로 남는다.