프롤로그 — 먼저 결과를 보여드립니다
프롤로그 — 먼저 결과를 보여드립니다
이 책은 SQL을 설명하기 전에 결과를 먼저 보여줍니다. 이유는 하나입니다. SQL은 결과를 머릿속에 그리는 순간 이미 절반이 완성되기 때문입니다.
지금부터 두 가지를 보여드립니다. 위니브 카페 데이터를 분석한 결과입니다. 코드가 뭔지 몰라도 됩니다. 결과 표만 먼저 눈에 익혀두세요.
첫 번째 — 월별 매출 현황
카페를 운영하는 사람이라면 가장 먼저 보고 싶은 숫자입니다. "이번 달 매출이 얼마지? 지난달보다 나아졌나?" 이런 표를 원했습니다.
| 월 | 총매출 | 주문건수 | 평균단가 |
|---|---|---|---|
| 1월 | 35,430,000 | 46 | 770,217.39 |
| 2월 | 15,599,500 | 46 | 339,119.56 |
| 3월 | 38,395,000 | 49 | 783,571.42 |
| 4월 | 94,032,100 | 46 | 2,044,176.08 |
| 5월 | 11,990,000 | 44 | 272,500 |
그래서 이렇게 썼습니다.
SELECT 월,
SUM(금액) AS 총매출,
COUNT(*) AS 주문건수,
AVG(금액) AS 평균단가
FROM 판매정보
WHERE 연도 = 2024
GROUP BY 월
ORDER BY 월;
두 번째 — 카테고리별 매출 분석
"우리 카페에서 뭐가 제일 잘 팔리지?" 이런 표를 원했습니다.
| 카테고리 | 판매건수 | 총매출 |
|---|---|---|
| 전자기기 | 116 | 186,877,500 |
| 주변기기 | 115 | 8,514,000 |
그래서 이렇게 썼습니다.
SELECT 카테고리,
COUNT(*) AS 판매건수,
SUM(금액) AS 총매출
FROM 판매정보
GROUP BY 카테고리
HAVING COUNT(*) >= 100
ORDER BY 총매출 DESC;
지금 이 코드가 암호처럼 보인다면 정상입니다. 지금 이 코드를 이해할 필요는 없습니다. 이 책을 다 읽고 나면 이 코드가 한 줄씩 읽힙니다. 더 정확히는 이렇게 됩니다.
원하는 표가 머릿속에 그려지는 순간, 어떤 줄을 어떻게 써야 하는지 자연스럽게 떠오릅니다.
그게 이 책이 목표하는 지점입니다.
SQL을 배우는 두 가지 방법
방법 A — 명령어부터 배우는 방식
- SELECT가 뭔지 배운다
- → WHERE가 뭔지 배운다
- → GROUP BY가 뭔지 배운다
- → 언젠가 조합해서 써본다
대부분의 SQL 책이 이 방식입니다. 배우다 보면 "이걸 언제 어디에 쓰는 거지?" 하는 막막함이 옵니다.
방법 B — 결과부터 생각하는 방식
- 원하는 표를 먼저 그린다
- → 그 표를 만들기 위해 필요한 원칙을 배운다
- → 바로 써본다
이 책의 방식입니다. 매 챕터가 이렇게 시작합니다.
"이런 결과를 원한다면, 이렇게 쓰면 됩니다."
이 책이 담은 것과 담지 않은 것
SQL에는 수백 개의 명령어와 함수가 있습니다. 이 책은 그중 딱 6가지만 다룹니다. 그리고 6가지 방법에서 가장 중요한 내용들만 다루게 됩니다.
| 원칙 | 명령어 | 한 줄 역할 |
|---|---|---|
| 1 | SELECT | 어떤 열을 볼까 |
| 2 | FROM | 어느 테이블에서 |
| 3 | WHERE | 어떤 행만 |
| 4 | ORDER BY | 어떤 순서로 |
| 5 | GROUP BY | 묶어서 집계하면 |
| 6 | HAVING | 집계 후 조건은 |
제 경험상 일반적인 실무를 보시는 분이라면 이 6가지면 실무에서 원하는 데이터의 80%를 꺼낼 수 있습니다. 나머지 20%는 에필로그에서 Claude와 함께 해결합니다.
담지 않은 것들, 예를 들어 JOIN, 서브쿼리, 윈도우 함수 같은 것들은 다음 책에서 다룹니다.
처음부터 다 알려주는 책보다, 이 책 한 권을 끝냈을 때
"나 이제 SQL 쓸 수 있어" 라고 말할 수 있는 책이 낫습니다.
이 책의 실습 무대
모든 예제는 하나의 데이터로 진행합니다.
위니브 카페 (Weniv Café)
서울 · 경기 지역 25개 매장을 운영하는 커피 프랜차이즈. 영업한 지 이제 2달, 고객 500명, 주문 2,400건, 상품 20종을 판매하고 있습니다.
지금 테이블은 단 두 개입니다.
- 고객정보: 이름, 나이, 등급, 지역
- 판매정보: 메뉴, 금액, 날짜, 고객번호
복잡하지 않습니다. 실제 분석 현장에서 마주치는 질문들을 이 두 테이블로 전부 재현합니다.
등장인물
- 박지수 팀장
- 위니브 카페 데이터분석팀 팀장. SQL 경력 7년. 민서에게 미션을 주고 방향을 잡아줍니다.
- 김민서
- 오늘 첫 출근한 신입 분석가. 독자 본인입니다. SQL은 들어봤지만 실전은 처음입니다.
실습 환경
설치가 필요 없습니다. 브라우저 하나면 됩니다.
- https://sql.weniv.co.kr/ 접속 → 바로 시작
- 책 전체의 샘플 데이터는 [깃허브 링크]에서 내려받을 수 있습니다.
- 붙여넣기 한 번이면 준비 끝입니다.
만약 SQL의 구조가 어려우신 분들은 https://claude.ai/public/artifacts/15fb1793-c6a8-4fdd-8afb-4507624bfcda 이 사이트를 참고해 보세요. 다만 이 내용은 향후 업데이트를 통해 완성될 예정입니다.
시작하기 전 한 가지
SQL을 배우는 데 재능은 필요 없습니다. 필요한 것은 딱 하나입니다.
"나는 이런 결과를 원한다" 는 생각.
그 생각이 있으면, 코드는 따라옵니다.
자, 시작합니다.
💻 김민서
(첫 출근 아침, SQL 에디터를 열며) 일단 ... 이 테이블이 어떻게 생겼는지부터 봐야겠지?
▶ 준비 — SQL을 쓰기 전에 딱 한 챕터만