조인을 했는데 결과 행 수가 늘어날 때,
“조인 잘못했나?” 하고 당황한 적 있으신가요?
하지만 행이 늘어났다는 게 꼭 오류를 의미하지 않습니다.
데이터가 어떤 구조로 쌓여 있는지 이해하면,
그 변화가 자연스러운 경우도 많습니다.
-- 주문 기본 테이블
orders
+-----------+-------------+
| order_id | customer_id |
+-----------+-------------+
| 1001 | A |
| 1002 | B |
+-----------+-------------+
-- 주문 상세 테이블
order_items
+-----------+-----------+
| order_id | item_name |
+-----------+-----------+
| 1001 | Keyboard |
| 1001 | Mouse |
| 1002 | Monitor |
+-----------+-----------+
이 두 테이블을 조인하면 이렇게 됩니다.
SELECT o.order_id
, o.customer_id
, i.item_name
FROM orders o
INNER JOIN order_items i
ON o.order_id = i.order_id;
| order_id | customer_id | item_name |
|---|---|---|
| 1001 | A | Keyboard |
| 1001 | A | Mouse |
| 1002 | B | Monitor |
행이 늘어났죠.
하지만 이건 잘못된 조인이 아닙니다.
한 주문이 여러 상품을 가질 수 있기 때문이에요.
즉, “행이 늘었다”는 건 데이터의 관계(1:N 구조) 를 반영한 자연스러운 결과입니다.
조인을 해석할 때는 먼저,
이 데이터가 어떤 단위를 기준으로 쌓여 있는지 생각해야 합니다.
• 주문 테이블 → 주문 1건당 1행
• 주문 상세 테이블 → 주문 상품 1건당 1행
이 둘을 조인했으니,
‘주문 × 상품’ 단위로 행이 많아지는 건 당연하죠.
그래서 조인을 검증할 때는
“행이 늘었나?”보다
“이 구조에서 이 정도의 변화가 자연스러운가?”를 보는 게 정확합니다.
물론 모든 행 증가가 정상은 아닙니다.
• 1:1 관계인데 행이 늘어난 경우
→ 중복 키 가능성 확인이 필요합니다.
• 1:N 관계인데 행이 줄어든 경우
→ INNER JOIN으로 인해 일부 데이터가 누락됐을 수 있습니다.
✔️ 데이터 구조를 제대로 이해하고 정제해야 조인 결과를 올바르게 해석할 수 있습니다.