부록 · 빠른 참조와 진단

← 7부 다음 단계 · 목차

곁에 두고 펼쳐 보는 참조 모음입니다. 명령어 빠른 참조, 증상→처방 진단표, 치트시트, 용어집, 공식 문서 링크 순입니다.

A. SQL 명령어 빠른 참조

테이블 다루기 (DDL)

SQL
CREATE TABLE 이름 (열 타입 제약, ...);   -- 표 생성
ALTER TABLE 이름 ADD COLUMN 열 타입;      -- 열 추가
DROP TABLE IF EXISTS 이름;                -- 표 삭제(구조+데이터)

데이터 다루기 (DML)

SQL
INSERT INTO 표 (열1, 열2) VALUES (값1, 값2);          -- 추가
INSERT INTO 표 (열) VALUES (값1), (값2), (값3);        -- 여러 행
UPDATESET 열 = 값 WHERE 조건;                      -- 수정
DELETE FROMWHERE 조건;                             -- 삭제

조회 (Query) — 쓰는 순서

SQL
SELECT 열, 집계함수
FROMJOIN 다른표 ON 연결조건
WHERE 행조건
GROUP BY 묶음기준
HAVING 그룹조건
ORDER BY 정렬기준 [ASC|DESC]
LIMIT 개수 [OFFSET 건너뛸수];

실행 순서 (외우면 오류가 줄어든다)

CODE
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

운영

SQL
BEGIN; ... COMMIT;                 -- 트랜잭션 확정
BEGIN; ... ROLLBACK;              -- 트랜잭션 취소
CREATE INDEX 이름 ON 표(열);       -- 인덱스
CREATE VIEW 이름 AS SELECT ...;    -- 뷰
PRAGMA foreign_keys = ON;          -- 외래키 검사 켜기(SQLite)
EXPLAIN QUERY PLAN SELECT ...;     -- 실행 계획 진단(SQLite)

B. 증상 → 원인 → 처방 진단표

쿼리가 뜻대로 안 될 때 펼쳐 보세요.

증상흔한 원인처방
결과가 항상 비어 있음= NULL로 비교IS NULL / IS NOT NULL 사용 (2부)
결과가 비정상적으로 많음(폭증)JOINON 누락 → 카티전 곱ON으로 연결 조건 명시 (5부)
행이 전부 바뀌거나 사라짐UPDATE/DELETEWHERE 누락먼저 같은 WHERESELECT 확인 (3부)
no such column 오류별칭 미사용으로 칸 모호, 오타표.칸 으로 한정, 철자 확인
ambiguous column name 오류여러 표에 같은 칸 이름c.id처럼 별칭으로 구분 (5부)
WHERE에서 별칭 못 씀실행 순서상 WHERESELECT보다 먼저WHERE엔 원래 식, 또는 서브쿼리 (4부)
집계 조건이 WHERE에서 오류그룹 조건을 WHERE에 씀HAVING 사용 (5부)
FOREIGN KEY constraint failed존재하지 않는 대상 참조부모 행 먼저 삽입, 참조값 확인 (3부)
UNIQUE constraint failed중복 값 삽입기존 값 확인, 필요시 UPDATE
NOT NULL constraint failed필수 칸을 비움값 제공 또는 DEFAULT 설정
외래키 위반이 안 막힘PRAGMA foreign_keys=ON 안 함연결마다 PRAGMA 실행 (3부)
파이썬에서 변경이 저장 안 됨commit() 누락conn.commit() 또는 with conn: (7부)
쿼리가 느림전체 스캔(SCAN)EXPLAIN QUERY PLAN 확인 후 인덱스 (6부)
한글 LIKE 대소문자 이상LIKE의 유니코드 한계정밀 검색은 전문 검색 도구 고려 (4부)

C. 치트시트

C-1. SQLite 데이터 타입

타입담는 것비고
INTEGER정수INTEGER PRIMARY KEY는 자동증가
REAL소수(실수)
TEXT글자날짜도 여기에 '2026-01-03' 형식으로
BLOB이진 데이터입문에선 거의 안 씀
NULL값 없음0·''과 다름

C-2. 제약조건

제약
PRIMARY KEY유일 + 비어있지않음 (행의 대표)
NOT NULL빈 값 금지
UNIQUE중복 금지
DEFAULT v값 없으면 v
CHECK (조건)조건 만족 값만
FOREIGN KEY ... REFERENCES다른 표에 존재하는 값만

C-3. 비교·논리 연산자

연산
= <>(!=)같다 / 다르다
< <= > >=대소
AND OR NOT논리 결합
IN (a,b,c)목록 중 하나
BETWEEN a AND b범위(양 끝 포함)
LIKE '패턴'패턴 매칭(%=0+글자, _=1글자)
IS NULL / IS NOT NULL빈 값 여부

C-4. 집계 함수

함수하는 일
COUNT(*)행 수(NULL 포함)
COUNT(칸)NULL 아닌 값의 수
COUNT(DISTINCT 칸)고유 값의 수
SUM AVG합계 / 평균
MIN MAX최소 / 최대

C-5. 자주 쓰는 SQLite 함수

함수결과
upper / lowerupper('abc')ABC
lengthlength('모비딕')3
COALESCE(a,b)COALESCE(author,'미상')a가 NULL이면 b
date('now')오늘 날짜
strftime('%Y',날짜)strftime('%Y','2026-01-03')2026

C-6. 선택 가이드 (개관)

어느 것도 "유일한 정답"은 아닙니다. 개념을 먼저, 도구는 필요에 맞춰.
갈림길단순/입문확장 시 고려
데이터베이스SQLite (무설치·로컬·읽기위주)PostgreSQL·MySQL (동시쓰기·서버·대용량)
기본키인공 id(대리키)자연키는 신중히
관계외래키로 명시다대다는 중간 표
빠르게느려진 뒤 인덱스측정 후 병목에만
파이썬 접근표준 sqlite3ORM(SQLAlchemy 등)

D. 용어집

  • 데이터베이스(database) — 데이터를 구조화해 저장·관리·조회하는 시스템.
  • 관계형 데이터베이스(relational database) — 데이터를 표(테이블)로 나누고 관계로 잇는 방식. SQLite·PostgreSQL·MySQL 등.
  • SQL(Structured Query Language) — 관계형 데이터베이스에 묻고 조작하는 표준 언어.
  • 테이블(table) — 같은 종류 대상을 모은 표. 행(row/record) = 한 대상, 열(column) = 한 종류 정보.
  • 기본키(primary key) — 각 행을 유일하게 구별하는 대표값. 비어있을 수 없음.
  • 외래키(foreign key) — 다른 표의 기본키를 가리키는 칸. 표를 잇는다.
  • 제약조건(constraint) — 잘못된 데이터를 막는 규칙(NOT NULL·UNIQUE·CHECK 등).
  • NULL — "값 없음"이라는 특별한 상태. 0·빈 글자와 다름.
  • 정규화(normalization) — 중복을 줄이려 데이터를 여러 표로 나누는 설계 원칙.
  • JOIN — 여러 표를 연결 조건으로 합치는 것. INNER(양쪽 다)·LEFT(왼쪽 다).
  • 집계 함수(aggregate function) — 여러 행을 한 값으로 요약(COUNT·SUM·AVG 등).
  • GROUP BY — "~별"로 묶어 집계. HAVING — 묶은 그룹을 거름.
  • 서브쿼리(subquery) — 다른 쿼리 안에 들어간 쿼리.
  • 윈도우 함수(window function) — 행을 접지 않고 순위·누계를 덧붙이는 함수(OVER).
  • 트랜잭션(transaction) — 여러 변경을 "전부 되거나 전부 안 되거나"로 묶는 단위.
  • ACID — 트랜잭션의 보장: 원자성·일관성·격리성·지속성.
  • 무결성(integrity) — 데이터가 어긋나지 않게 지켜지는 성질(개체·참조·도메인).
  • 인덱스(index) — 칸 값을 미리 정렬해 둔 색인. 조회를 빠르게.
  • 뷰(view) — 저장된 쿼리이자 가상 테이블. 복잡한 쿼리 재사용.
  • SQL 인젝션(SQL injection) — 입력이 SQL 명령으로 해석되는 보안 취약점. ? 바인딩으로 방지.
  • NoSQL — 표가 아닌 다른 모양(문서·키값·그래프·검색)의 데이터베이스 총칭.
  • DDL / DML — 구조를 다루는 명령(CREATE 등) / 데이터를 다루는 명령(INSERT 등).

E. 더 배울 거리 (공식 문서)

추측이 아니라 1차 출처를 권합니다. 버전에 따라 세부가 바뀌니, 막히면 공식 문서를 보는 습관을 들이세요.

  • SQLite 공식 문서https://www.sqlite.org/docs.html (SQL 문법·함수·PRAGMA의 권위 있는 출처)
  • SQLite 지원 SQL 구문https://www.sqlite.org/lang.html
  • 파이썬 sqlite3 모듈https://docs.python.org/3/library/sqlite3.html
  • pandas 입출력(read_sql 등)https://pandas.pydata.org/docs/
  • PostgreSQL 공식 문서https://www.postgresql.org/docs/ (서버형으로 넘어갈 때)
  • MySQL 공식 문서https://dev.mysql.com/doc/
  • DB Browser for SQLitehttps://sqlitebrowser.org/ (GUI 도구)
  • 연습용 공개 데이터 — 공공데이터포털, 캐글(Kaggle) 등에서 CSV를 받아 to_sql로 넣어 연습

F. 마치며

이 안내서는 SQL을 처음 만나는 사람이 손으로 직접 쳐 보며 데이터베이스의 핵심을 익히도록 설계했습니다. 작은 서점 하나를 만들며 설계·입력·질의·운영·코드를 한 바퀴 돌았습니다. 여기서 배운 개념은 어느 데이터베이스로 가든 토대가 됩니다.

가장 중요한 한 가지를 다시 말하면: 실제 데이터로 질문을 던지는 연습이 최고의 스승입니다. 관심 있는 데이터를 SQLite에 넣고, 궁금한 것을 SQL로 물어보세요. 막히면 이 부록으로 돌아오세요. 즐거운 쿼리 되시길 바랍니다.

← 7부 다음 단계 · 목차