챕터
개요
완전초보를 위한, 손으로 직접 쳐 보며 배우는 SQL 안내서
실습 환경: SQLite(설치 불필요) · 누적 프로젝트: 온라인 서점
이 안내서는 무엇인가
데이터를 다루는 일은 결국 "어디에 어떻게 쌓아 두고, 필요할 때 어떻게 꺼내 보느냐"의 문제입니다. 엑셀 시트 하나로 시작했던 데이터가 늘어나고, 여러 사람이 동시에 보고 고치고, 서로 연결된 정보(누가·무엇을·언제 샀는지)를 묻기 시작하면 시트는 금방 한계에 부딪칩니다. 그 지점에서 등장하는 도구가 데이터베이스(database) 이고, 데이터베이스에 묻고 답을 받는 공용어가 SQL(Structured Query Language, 구조화 질의 언어) 입니다.
이 안내서는 SQL을 한 번도 써 본 적 없는 사람을 주요 대상으로 합니다. 프로그래밍 경험이 없어도 괜찮습니다. SQL은 영어 문장에 가까운 문법이라, 결과를 빨리 눈으로 확인하며 배울 수 있는 분야입니다. 우리는 추상적인 이론부터 쌓지 않고, 첫 챕터부터 실제로 도는 데이터베이스를 만들어 질문을 던지고 답을 받아 봅니다.
pandas를 아는 분께
이 안내서는 pandas 입문 안내서의 짝꿍으로 설계되었습니다. pandas가 "메모리에 올린 표 하나를 파이썬으로 주무르는 법"이라면, SQL은 "디스크에 안전하게 쌓인 여러 표를, 표준 언어로 묻는 법"입니다. 둘은 경쟁이 아니라 동선입니다. 데이터를 SQL로 꺼내 pandas로 가공하는 흐름이 데이터 입문의 가장 흔한 경로이고, 이 안내서 곳곳에서 "이건 pandas의 무엇에 해당한다"를 짚어 드립니다.
큰 그림: 데이터베이스와 SQL이 사는 곳
SQL을 배운다는 건 결국 아래 그림의 화살표들을 하나씩 손에 익히는 일입니다. 데이터가 어떻게 들어가서(설계·입력) 어떻게 나오는지(질의), 그리고 어떻게 안전하게 유지되는지(제약·트랜잭션)를 따라갑니다.
flowchart LR
subgraph 설계["① 설계 · 정의 (DDL)"]
A[테이블 구조 정하기<br/>CREATE TABLE]
B[관계 정하기<br/>기본키 · 외래키]
end
subgraph 입력["② 데이터 넣기 (DML)"]
C[행 추가<br/>INSERT]
D[행 수정 · 삭제<br/>UPDATE · DELETE]
end
subgraph 질의["③ 묻기 (Query)"]
E[고르기 · 거르기<br/>SELECT · WHERE]
F[합치기<br/>JOIN]
G[요약하기<br/>GROUP BY]
end
subgraph 운영["④ 지키기 (관리)"]
H[제약으로 데이터 보호<br/>제약조건]
I[안전한 변경<br/>트랜잭션]
J[빠른 조회<br/>인덱스]
end
설계 --> 입력 --> 질의
설계 -.규칙 부여.-> 운영
질의 -.튜닝.-> 운영
classDef ddl fill:#e8d5f2,stroke:#9b59b6,color:#000
classDef dml fill:#d5e8f2,stroke:#3498db,color:#000
classDef query fill:#d5f2e0,stroke:#27ae60,color:#000
classDef ops fill:#fdf0d5,stroke:#e67e22,color:#000
class A,B ddl
class C,D dml
class E,F,G query
class H,I,J ops
각 부에서 "지금 다루는 단계"를 이 그림 안에서 강조하며 진행합니다. 위 색은 안내서 전체에서 일관되게 씁니다: 설계·정의=보라, 데이터 입력=파랑, 질의=초록, 운영·관리=주황, 그리고 별도로 사용자가 던지는 질문/명령=노랑, 오류·함정=빨강으로 표시합니다.
누적 실습 프로젝트: 온라인 서점
안내서 전체를 관통하는 하나의 프로젝트를 만듭니다. 작은 온라인 서점의 데이터베이스입니다. 부가 진행될수록 한 단계씩 살이 붙어, 마지막엔 실제로 질문에 답하는 작은 시스템이 됩니다.
| 부 | 프로젝트에 더해지는 것 |
|---|---|
| 1부 | 데이터베이스 파일 하나를 만들고 첫 질문을 던진다 |
| 2부 | books, customers, orders 테이블을 직접 설계하고 만든다 |
| 3부 | 실제 데이터를 채우고, 잘못된 데이터를 막는 규칙을 건다 |
| 4부 | SELECT로 원하는 책·고객을 자유자재로 골라낸다 |
| 5부 | 여러 테이블을 JOIN으로 잇고 GROUP BY로 매출을 요약한다 |
| 6부 | 트랜잭션·인덱스·뷰로 안전하고 빠르게 운영한다 |
| 7부 | 파이썬에서 DB를 다루고, 다음 단계(PostgreSQL 등)로 넓힌다 |
코드는 복붙하면 실제로 돌아갑니다. 모든 챕터는 SQLite 기준이며, 사용하는 도구와 예상 출력을 함께 적습니다. 특정 제품에 묶이지 않도록 "개념 → SQLite 구현 → 다른 DB에선 이렇게"의 순서로 설명합니다.
목차
1부 · 왜 데이터베이스이고, 왜 SQL인가
01_왜_데이터베이스인가.md — 엑셀로는 왜 부족한가, 데이터베이스란 무엇인가, 관계형 데이터베이스와 SQL의 핵심 아이디어, SQLite 첫 실행, 손으로 만드는 가장 단순한 DB
2부 · 데이터를 담는 그릇: 테이블 설계
02_테이블과_데이터타입.md — 테이블·행·열, 데이터 타입, CREATE TABLE, 기본키(primary key), NULL이란 무엇인가
03_관계와_외래키.md — 왜 표를 쪼개는가(정규화 맛보기), 외래키(foreign key), 일대다·다대다 관계, 서점 스키마 완성
3부 · 데이터 넣고 고치고 지우기 (DML)
04_INSERT_UPDATE_DELETE.md — 행 추가·수정·삭제, 한 번에 여러 행, 실수 막기, 제약조건(constraint)으로 데이터 지키기
4부 · 묻기의 기본: SELECT
05_SELECT_기초.md — SELECT·FROM·WHERE, 정렬·개수 제한, 별칭, 연산·함수
06_필터링_심화.md — LIKE·IN·BETWEEN·NULL 다루기, CASE, 중복 제거, SQL이 실제로 실행되는 순서
5부 · 여러 테이블을 잇고 요약하기
07_JOIN.md — 조인이 푸는 문제, INNER/LEFT JOIN, 자기 조인, 흔한 함정
08_집계와_GROUP_BY.md — COUNT·SUM·AVG, GROUP BY·HAVING, 서브쿼리, 윈도우 함수 맛보기
6부 · 안전하고 빠르게: 운영의 기초
09_트랜잭션과_무결성.md — 트랜잭션(transaction)과 ACID, 동시성, 데이터 무결성
10_인덱스와_뷰.md — 인덱스(index)로 빠르게, 뷰(view)로 깔끔하게, 쿼리 성능의 기초
7부 · 코드와 실전으로 넓히기
11_파이썬과_SQL.md — 파이썬에서 DB 다루기, SQL 인젝션 주의, pandas와의 연결
12_다음_단계.md — SQLite를 넘어(PostgreSQL·MySQL), NoSQL이란, 흔한 실수 카탈로그, 더 배울 거리
부록
13_부록.md — 명령어 빠른 참조표, 증상→원인→처방 진단표, 데이터 타입·제약 치트시트, 용어집, 공식 문서 링크
학습법: 어떻게 읽으면 좋은가
가장 중요한 원칙 하나. 눈으로만 읽지 말고 반드시 직접 쳐 보세요. SQL은 자전거 타기와 같아서, 손으로 쿼리를 쓰고 결과를 보고 틀려 보는 과정에서만 늡니다. 각 챕터의 코드는 복붙해서 바로 실행할 수 있게 만들었습니다.
권장 진행 방식:
- 1부에서 실습 환경을 갖춥니다(설치랄 게 거의 없습니다).
- 챕터를 읽으며 코드 블록이 나올 때마다 직접 실행하고, 출력이 안내서와 같은지 확인합니다.
- 각 챕터 끝의 "직접 해 보기" 문제를 풀어 봅니다. 막히면 다음 챕터 초반에 힌트가 있습니다.
- 한 부가 끝나면 누적 프로젝트 파일이 어떻게 자랐는지 돌아봅니다.
필요한 사전지식
거의 없습니다. 컴퓨터에서 파일을 만들고 명령어를 한 줄 입력할 수 있으면 충분합니다. 파이썬을 조금 알면 7부에서 도움이 되지만, 1~6부는 파이썬 없이도 전부 진행할 수 있습니다.
솔직한 약속
- 각 기법의 비용·한계를 함께 적습니다. "이건 빠르지만 이런 경우엔 느려진다", "이건 편하지만 이런 위험이 있다"를 숨기지 않습니다.
- 특정 제품을 정답인 양 권하지 않습니다. SQLite로 배우되, 개념은 어디서나 통하도록 설명합니다.
- 존재하지 않는 기능을 지어내지 않습니다. 버전에 따라 다른 부분은 그렇다고 밝힙니다.
준비됐으면 1부로 갑니다 →