AI 시대 DB 모델링 & SQL 완벽 마스터3-6 연습 문제
테크타니 LEARN — 섹션 03 · 연습 문제

3-6 연습 문제 — JOIN 핵심,
직접 이어본 테이블만 내 것이 된다

INNER JOIN·LEFT JOIN·IS NULL 패턴·4-테이블 체인 — 방금 배운 무기를 바로 손에 쥐어봅니다. 눈으로 읽은 SQL은 내일이면 사라지지만, 직접 짜본 SQL만 머리에 남습니다. 막히면 정답 대신 힌트부터 받으세요.

문제3문제 (도전 1 포함)권장 소요15~20분사용 테이블members · orders · order_items · products준비물3-6 수강 완료

풀기 전에 — 무기 점검

3-1 ~ 3-3

완료 ✓

3-4 ~ 3-5

완료 ✓

3-6 JOIN 핵심

완료 ✓

3-6 연습 문제

지금 여기

3-7 JOIN 뻥튀기 함정 ⭐

다음 마일스톤

이번 강의에서 배운 것 — 이 문제들에 그대로 씁니다
INNER JOIN / LEFT JOIN 의 차이
테이블 별칭(alias)
부모-자식 관점의 ON 조건
LEFT JOIN + IS NULL 패턴
3개 이상 JOIN 체인
AI 과외 선생님 활용법

2-4에서 만든 AI 과외 선생님 세션을 그대로 쓰세요. 막히면 정답이 아니라 힌트만 요청하고 — “정답 말고 힌트만 줘” — 다 푼 뒤에는 본인 SQL과 결과를 던지면서 “이 결과가 맞는지 검증해줘” 라고 물어보세요. 직접 틀려본 경험이 곧 검증 능력의 재료가 됩니다.

문제 1. 회원별 주문 수 (전체 회원)

모든 회원 의 이름과 주문 수를 구하세요. 주문 0인 회원도 포함 해야 합니다 (LEFT JOIN). 주문 많은 순으로 정렬.

기대 결과 — 20 rows
member_name주문수
김철수6 ← 첫 줄
?0 ← 마지막 4명은 주문수 0
20 rows fetched — 주문 없는 회원까지 전부 나와야 정답
정답 보기
SELECT
  m.member_name,
  COUNT(o.order_id) AS 주문수
FROM
  members m
LEFT JOIN orders o
  ON m.member_id = o.member_id
GROUP BY
  m.member_id,
  m.member_name
ORDER BY
  주문수 DESC;
✕ COUNT(*)

주문 0인 회원이 1로 잡힙니다

LEFT JOIN 은 주문 없는 회원도 한 행(주문 칸은 전부 NULL)으로 살려두는데, COUNT(*) 는 그 NULL 행까지 세버립니다.

✓ COUNT(o.order_id)

NULL 은 세지 않습니다

COUNT(컬럼) 은 NULL 을 건너뛰므로 — 주문 없는 회원이 정확히 0 으로 카운트됩니다.

문제 2. 주문 안 한 회원 찾기

한 번도 주문을 하지 않은 회원의 이름 을 구하세요. (LEFT JOIN + IS NULL 패턴)

기대 결과 — 4 rows
member_name
황태웅
안소영
류재민
백서윤
4 rows fetched — 주문 기록이 전혀 없는 회원만
정답 보기
SELECT
  m.member_name
FROM
  members m
LEFT JOIN orders o
  ON m.member_id = o.member_id
WHERE
  o.order_id IS NULL;

문제 3 (도전). 도서를 산 회원

도서 카테고리(category_id = 4) 상품을 한 번이라도 산 적이 있는 회원의 이름 을 구하세요. 중복 없이.

기대 결과: 도서를 구매한 회원 (중복 제거)

힌트 — 4-테이블 체인
members
└─ member_id ─▶ orders
└─ order_id ─▶ order_items
└─ product_id ─▶ products
 
같은 회원이 책을 여러 번 샀다면? → DISTINCT 또는 GROUP BY 로 중복 제거
정답 보기
SELECT DISTINCT
  m.member_name
FROM
  members m
JOIN orders o
  ON m.member_id = o.member_id
JOIN order_items oi
  ON o.order_id = oi.order_id
JOIN products p
  ON oi.product_id = p.product_id
WHERE
  p.category_id = 4
ORDER BY
  m.member_name;

세 문제 모두 직접 짜봤다면 JOIN 의 핵심은 손에 들어온 겁니다. 그런데 문제 3 같은 체인 JOIN, 조건 하나만 어긋나면 결과가 조용히 뻥튀기되는 함정 이 있습니다 — 이 강의에서 가장 중요한 별표 강의로 갑니다.

NEXT LESSON3-7 JOIN 뻥튀기 함정 ⭐

JOIN 했더니 매출이 두 배? — 실무에서 가장 비싼 SQL 사고를 미리 겪어봅니다.

GO ▸ 다음 강의 시작하기