L1 입문

SQL 데이터베이스 입문

설치 없이 SQLite로 — 데이터를 쌓고 꺼내 묻는 표준 언어 SQL을 처음부터.

13챕터
1부(部)
2시간총 분량
첫 챕터 시작 →

챕터

개요

완전초보를 위한, 손으로 직접 쳐 보며 배우는 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_기초.mdSELECT·FROM·WHERE, 정렬·개수 제한, 별칭, 연산·함수

06_필터링_심화.mdLIKE·IN·BETWEEN·NULL 다루기, CASE, 중복 제거, SQL이 실제로 실행되는 순서

5부 · 여러 테이블을 잇고 요약하기

07_JOIN.md — 조인이 푸는 문제, INNER/LEFT JOIN, 자기 조인, 흔한 함정

08_집계와_GROUP_BY.mdCOUNT·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. 1부에서 실습 환경을 갖춥니다(설치랄 게 거의 없습니다).
  2. 챕터를 읽으며 코드 블록이 나올 때마다 직접 실행하고, 출력이 안내서와 같은지 확인합니다.
  3. 각 챕터 끝의 "직접 해 보기" 문제를 풀어 봅니다. 막히면 다음 챕터 초반에 힌트가 있습니다.
  4. 한 부가 끝나면 누적 프로젝트 파일이 어떻게 자랐는지 돌아봅니다.

필요한 사전지식

거의 없습니다. 컴퓨터에서 파일을 만들고 명령어를 한 줄 입력할 수 있으면 충분합니다. 파이썬을 조금 알면 7부에서 도움이 되지만, 1~6부는 파이썬 없이도 전부 진행할 수 있습니다.

솔직한 약속

  • 각 기법의 비용·한계를 함께 적습니다. "이건 빠르지만 이런 경우엔 느려진다", "이건 편하지만 이런 위험이 있다"를 숨기지 않습니다.
  • 특정 제품을 정답인 양 권하지 않습니다. SQLite로 배우되, 개념은 어디서나 통하도록 설명합니다.
  • 존재하지 않는 기능을 지어내지 않습니다. 버전에 따라 다른 부분은 그렇다고 밝힙니다.

준비됐으면 1부로 갑니다 →