제2부 여러 테이블을 연결하는 SQL
제24장 관계를 따라 JOIN하기 - 데이터베이스 지도를 읽는 방법
📚 JOIN 학습 시리즈
① 왜 JOIN이 필요할까요?
② INNER JOIN
③ 관계를 따라 JOIN하기 ← 현재
④ 여러 테이블 JOIN
⑤ 테이블 별명(Alias)
⑥ LEFT JOIN
⑦ RIGHT JOIN
⑧ SELF JOIN
오늘의 질문
지난 시간에는 Customers와 Orders를 연결했습니다.
이번에는 팀장님이 조금 더 어려운 질문을 합니다.
"Anton 고객이 주문한 상품 이름을 알려 주세요."
잠시 생각해 봅시다.
고객 이름은 Customers 테이블에 있습니다.
상품 이름은 Products 테이블에 있습니다.
그렇다면 Customers와 Products를 바로 연결하면 될까요?
학습 목표
이번 장을 학습하면 다음 내용을 할 수 있습니다.
- 테이블 사이의 관계를 이해할 수 있다.
- 관계도를 보고 JOIN 순서를 찾을 수 있다.
- 여러 테이블을 연결하는 원리를 설명할 수 있다.
- 다음 장의 여러 테이블 JOIN을 준비할 수 있다.
24-1. 데이터베이스는 하나의 지도로 생각해 봅시다.
지금까지 우리는 테이블을 각각 따로 보았습니다.
하지만 실제 데이터베이스에서는 모든 테이블이 서로 연결되어 있습니다.
마치 도시의 지하철 노선도처럼 말입니다.
Customers
│
▼
Orders
│
▼
OrderDetails
│
▼
Products
각 선은
공통된 열(Column)로 연결되어 있습니다.
24-2. 왜 바로 연결할 수 없을까요?
가장 많이 하는 질문입니다.
Customers와 Products를 바로 JOIN하면 안 되나요?
생각해 봅시다.
Customers에는 CustomerID가 있습니다.
Products에는 ProductID가 있습니다.
두 테이블에는
직접 연결할 수 있는 공통 열이 없습니다.
따라서
중간 테이블이 필요합니다.
그림으로 이해하기
Customers
│ CustomerID
▼
Orders
│ OrderID
▼
OrderDetails
│ ProductID
▼
Products
고객은 주문을 하고,
주문에는 여러 상품이 포함됩니다.
따라서
고객과 상품 사이에는
Orders와 OrderDetails가 다리 역할을 합니다.
잠깐 생각해 보기
서울에서 부산으로 간다고 가정해 봅시다.
직행 열차가 없다면
중간 역을 거쳐야 합니다.
서울
↓
대전
↓
대구
↓
부산
JOIN도 같습니다.
직접 연결되지 않으면
중간 테이블을 지나갑니다.
24-3. 관계도를 읽는 연습
다음 질문에 답해 봅시다.
고객 이름과 주문 날짜
Customers
↓
Orders
두 개의 테이블이면 됩니다.
고객 이름과 상품 이름
Customers
↓
Orders
↓
OrderDetails
↓
Products
네 개의 테이블이 필요합니다.
상품 이름과 공급업체 이름
Products
↓
Suppliers
두 개의 테이블이면 됩니다.
주문 날짜와 배송 회사
Orders
↓
Shippers
두 개의 테이블이면 됩니다.
💡 잠깐! 이것도 알아두세요
JOIN을 잘하는 사람은
SQL을 많이 외운 사람이 아닙니다.
관계도를 보고 어떤 길로 가야 하는지 찾는 사람입니다.
SQL은 그 길을 문장으로 표현하는 것뿐입니다.
자주 하는 실수
① 연결되지 않은 테이블을 바로 JOIN하려고 한다.
② 필요한 중간 테이블을 빼먹는다.
③ SQL부터 작성하려고 한다.
먼저 관계도를 그리고,
그다음 SQL을 작성하는 습관을 들이세요.
실무에서는 어떻게 사용할까요?
실무에서는 새로운 데이터베이스를 맡으면
SQL을 작성하기 전에
가장 먼저 ERD(Entity Relationship Diagram, 개체-관계 다이어그램) 를 확인합니다.
ERD는 테이블 간의 관계를 한눈에 보여 주는 설계도입니다.
개발자와 데이터베이스 관리자는 먼저 ERD를 보고, 어떤 테이블을 어떤 순서로 연결해야 하는지 파악한 뒤 SQL을 작성합니다.
여러분이 지금 연습하는 "관계를 따라가는 방법"은 바로 이 ERD를 읽는 기초 능력입니다.
실습
실습 1
"고객 이름과 주문 날짜"를 조회하려면 어떤 테이블이 필요한지 적어 보세요.
실습 2
"고객 이름과 상품 이름"을 조회하려면 거쳐야 하는 테이블을 순서대로 적어 보세요.
실습 3
"상품 이름과 공급업체 이름"을 조회하려면 어떤 테이블을 연결해야 하는지 적어 보세요.
실무 미션
여러분은 데이터 분석팀의 신입 사원입니다.
팀장님이 다음과 같이 요청했습니다.
"프랑스 고객이 주문한 상품 이름을 조회해야 합니다."
아직 SQL은 작성하지 않아도 됩니다.
먼저 필요한 테이블을 찾고,
어떤 순서로 연결해야 하는지
화살표로 표현해 보세요.
핵심 정리
✔ 관계형 데이터베이스는 여러 테이블이 연결된 구조이다.
✔ JOIN은 관계를 따라 이동하는 과정이다.
✔ 직접 연결되지 않은 테이블은 중간 테이블을 거쳐야 한다.
✔ SQL보다 먼저 관계도를 읽는 습관이 중요하다.
다음 장 예고
이제 관계도를 읽을 수 있게 되었습니다.
다음 장에서는 Customers → Orders → OrderDetails → Products를 실제로 모두 연결하여 여러 테이블 JOIN을 작성해 보겠습니다.
그리고 SQL이 조금 길어지는 것을 경험하게 될 것입니다.
그때 여러분은 자연스럽게 이런 생각을 하게 될 것입니다.
"SQL이 너무 길어요. 더 간단하게 작성할 방법은 없을까요?"
바로 다음 장에서 테이블 별명(Alias) 이 그 문제를 해결해 줄 것입니다.
'프로그래밍 > MySQL' 카테고리의 다른 글
| 📊 [SQL 프로젝트] 제23장 INNER JOIN - 두 테이블을 연결해 봅시다. (0) | 2026.07.06 |
|---|---|
| 📊 [SQL 프로젝트] 제22장 왜 JOIN이 필요할까요? - 여러 테이블을 연결하는 이유 (0) | 2026.07.06 |
| 📊 [SQL 프로젝트] 중간 정리 - 지금까지 배운 SQL 한눈에 보기 (0) | 2026.07.03 |
| 📊 [SQL 프로젝트] 제21장 여러 집계 함수를 함께 사용하기 - 하나의 통계 보고서 만들기 (0) | 2026.07.02 |
| 📊 [SQL 프로젝트] 제20장 GROUP BY와 MIN/MAX - 가장 큰 값과 가장 작은 값 찾기 (0) | 2026.07.02 |