준비 — SQL을 쓰기 전에 딱 한 챕터만
준비 — SQL을 쓰기 전에 딱 한 챕터만
박지수 팀장 : 민서씨, SQL 바로 시작하고 싶죠? 그전에 딱 세 가지만 알고 가요. 데이터가 어떻게 생겼는지, 왜 여러 표로 나뉘어 있는지, 코드 쓸 때 규칙이 뭔지. 이것만 알면 첫 줄 바로 쓸 수 있어요.
이 챕터는 SQL을 배우기 위한 최소한의 준비입니다. 세 가지만 짚고 넘어갑니다.
- 준비 1 — 데이터는 표에 저장된다
- 준비 2 — 표가 여러 개인 이유
- 준비 3 — 코드를 쓸 때 지키는 규칙 5가지
이 세 가지를 알고 나면 원칙 1로 바로 넘어갑니다.
준비 1 — 데이터는 표에 저장된다
카페를 운영하면 매일 이런 사실들이 생겨납니다.
- 오늘 아메리카노가 32잔 팔렸다
- 김준호 씨가 오늘 두 번째 방문이다
- 오후 3시에 주문이 가장 몰렸다
이 사실 하나하나가 데이터입니다.
데이터는 그냥 두면 사라집니다. 그래서 기록해야 합니다. 가장 쉬운 방법은 표로 만드는 것입니다.
표의 구조
아래는 고객 정보를 정리한 표입니다.
| id | 이름 | 나이 | 등급 | 지역 |
|---|---|---|---|---|
| 1 | 이하린 | 28 | GOLD | 서울 |
| 2 | 김준호 | 35 | VIP | 경기 |
| 3 | 박소연 | 22 | SILVER | 서울 |
| 4 | 최민재 | 41 | VIP | 인천 |
| 5 | 정유진 | 30 | GOLD | 경기 |
이 표에서 알아야 할 용어는 딱 세 가지입니다.
- 열(Column) — 세로 방향. 데이터의 종류. 이름, 나이, 등급이 각각 하나의 열입니다.
- 행(Row) — 가로 방향. 데이터 한 건. 이하린에 관한 정보 전체가 하나의 행입니다.
- 값(Value) — 열과 행이 만나는 칸 하나. 이하린의 나이인 28이 하나의 값입니다.
엑셀로 치면 이렇습니다.
| 엑셀 | 데이터베이스 | |
|---|---|---|
| 표 | 시트 | 테이블 |
| 세로 | 열 | 열(Column) |
| 가로 | 행 | 행(Row) |
엑셀이 있는데 왜 데이터베이스를 쓸까
매장이 1개, 하루 주문이 수십 건일 때는 엑셀로 충분합니다.
그런데 매장이 25개가 되면? 파일이 25개가 되고, 누가 어떤 파일을 고쳤는지 알 수 없게 됩니다.
하루 주문이 수천 건이 되면? 파일을 여는 데만 몇 분이 걸립니다.
| 엑셀 | 데이터베이스 | |
|---|---|---|
| 데이터 양 | 수만 건까지 무난 | 수천만 건도 빠름 |
| 동시 접근 | 한 명만 수정 가능 | 여러 명이 동시에 가능 |
| 실수 방지 | 없음 | 잘못된 값 자동 차단 |
이 차이 때문에 데이터베이스를 씁니다.
그리고 데이터베이스에 저장된 표에서 원하는 데이터를 꺼낼 때 쓰는 언어가 SQL입니다.
이 책의 실습 표 두 개
이 책에서는 표가 딱 두 개만 나옵니다.
고객정보 테이블 (6명의 샘플)
| id | 이름 | 나이 | 등급 | 지역 |
|---|---|---|---|---|
| 1 | 이하린 | 28 | GOLD | 서울 |
| 2 | 김준호 | 35 | VIP | 경기 |
| 3 | 박소연 | 22 | SILVER | 서울 |
| 4 | 최민재 | 41 | VIP | 인천 |
| 5 | 정유진 | 30 | GOLD | 경기 |
| 6 | 한지수 | 25 | SILVER | 서울 |
판매정보 테이블 (8건의 샘플)
| id | 고객id | 메뉴 | 금액 | 날짜 |
|---|---|---|---|---|
| 1 | 2 | 아메리카노 | 4,500 | 2024-01-03 |
| 2 | 1 | 딸기케이크 | 6,500 | 2024-01-05 |
| 3 | 3 | 카페라떼 | 5,500 | 2024-01-07 |
| 4 | 4 | 아메리카노 | 4,500 | 2024-01-10 |
| 5 | 1 | 카페라떼 | 5,500 | 2024-01-12 |
| 6 | 2 | 딸기케이크 | 6,500 | 2024-01-15 |
| 7 | 3 | 아메리카노 | 4,500 | 2024-01-18 |
| 8 | 5 | 카페라떼 | 5,500 | 2024-01-20 |
이 두 표를 눈에 익혀두세요. 이 책의 모든 예제가 여기서 나옵니다.
준비 2 — 표가 여러 개인 이유
한 가지 의문이 생깁니다.
판매정보 표를 보면 고객 이름이 없습니다.
고객id라는 번호만 있습니다.
왜 이름을 바로 쓰지 않고 번호를 쓸까요?
이름을 바로 쓰면 생기는 문제
이렇게 만들었다고 생각해봅시다.
| id | 고객이름 | 고객등급 | 메뉴 | 금액 |
|---|---|---|---|---|
| 1 | 김준호 | VIP | 아메리카노 | 4,500 |
| 2 | 김준호 | VIP | 아메리카노 | 4,500 |
| 3 | 김준호 | VIP | 카페라떼 | 5,500 |
김준호 씨의 등급이 VIP에서 GOLD로 바뀌면 어떻게 될까요?
저 3행을 전부 고쳐야 합니다. 주문이 100건이면 100행, 1000건이면 1000행을 고쳐야 합니다. 한 곳이라도 빠뜨리면 어떤 행은 VIP, 어떤 행은 GOLD가 됩니다. 데이터가 뒤섞입니다.
표를 분리하면 해결된다
그래서 이렇게 나눕니다.
- 고객정보 표 — 고객에 관한 정보만 저장
- 판매정보 표 — 판매 사실만 저장, 고객은 번호로 연결
고객정보
| id | 이름 | 등급 |
|---|---|---|
| 2 | 김준호 | VIP |
판매정보
| id | 고객id | 메뉴 |
|---|---|---|
| 1 | 2 | 아메리카노 |
| 2 | 2 | 아메리카노 |
| 3 | 2 | 카페라떼 |
이제 김준호 씨의 등급이 바뀌면 고객정보 표의 1행만 고치면 됩니다. 판매정보 표는 건드릴 필요가 없습니다.
판매정보의 고객id 2가 누구인지는 고객정보 표를 보면 됩니다.
이것이 표가 여러 개로 나뉘어 있는 이유입니다.
💡 지금은 이 정도만 알면 충분합니다
두 표를 연결해서 보는 것은 이 책의 범위 밖입니다. "표들이 번호로 연결되어 있다"는 것만 기억해두세요. 지금 당장 쓸 일은 없습니다.
준비 3 — 코드를 쓸 때 지키는 규칙 5가지
SQL을 처음 쓸 때 반드시 알아야 할 규칙입니다. 이 규칙을 모르면 코드를 올바르게 써도 에러가 납니다.
규칙 1 — 문장 끝에 세미콜론을 붙인다
SELECT 이름
FROM 고객정보;
세미콜론(;)은 "여기서 끝났다"는 신호입니다.
빠뜨리면 아직 입력 중이라고 인식해서 결과가 나오지 않거나 에러가 납니다.
규칙 2 — 명령어는 (되도록) 대문자로 쓴다
-- 둘 다 실행은 됩니다
SELECT 이름 FROM 고객정보; -- 이렇게 쓰는 것을 권장
select 이름 from 고객정보; -- 이래도 됩니다
SQL은 명령어의 대소문자를 구별하지 않습니다.
그래도 SELECT, FROM, WHERE처럼 명령어는 대문자로 쓰는 것이 관례입니다.
한눈에 명령어와 데이터 값이 구분되기 때문입니다.
규칙 3 — 문자 값은 작은따옴표로 감싼다
-- ✅ 올바른 예시
WHERE 등급 = 'VIP'
WHERE 지역 = '서울'
-- ❌ 잘못된 예시 — 에러 발생
WHERE 등급 = VIP
WHERE 지역 = 서울
숫자는 따옴표가 필요 없습니다.
-- ✅ 숫자는 따옴표 없이
WHERE 나이 = 30
WHERE 금액 > 5000
⚠️ 처음에 가장 많이 하는 실수가 이것입니다
에러가 나면 따옴표를 빠뜨린 건 아닌지 먼저 확인하세요.
규칙 4 — 줄바꿈은 자유다. 다만 줄바꿈을 하면 가독성이 좋아진다.
아래 두 코드는 완전히 같습니다.
-- 한 줄로
SELECT 이름, 나이, 등급 FROM 고객정보 WHERE 등급 = 'VIP';
-- 여러 줄로
SELECT 이름, 나이, 등급
FROM 고객정보
WHERE 등급 = 'VIP';
SQL은 줄바꿈을 무시합니다. 코드가 길어지면 여러 줄로 나눠 쓰는 것이 읽기 훨씬 쉽습니다. 이 책의 모든 예제는 여러 줄로 씁니다.
규칙 5 — 주석으로 설명을 달 수 있다
-- 이 줄은 실행되지 않습니다
SELECT 이름, -- 고객 이름
나이 -- 고객 나이
FROM 고객정보;
-- 뒤에 오는 내용은 실행되지 않습니다.
코드 옆에 설명을 달거나, 잠깐 실행하고 싶지 않은 줄을 꺼둘 때 씁니다.
이 책에서도 코드 설명에 --를 자주 씁니다.
이 챕터 용어 정리
이 책 전체에 나오는 용어를 한 번에 정리합니다.
| 용어 | 한 줄 설명 |
|---|---|
| 데이터(Data) | 현실에서 일어난 사실을 기록한 것 |
| 데이터베이스(Database) | 데이터를 모아서 관리하는 창고. DB라고 줄여 부름 |
| 테이블(Table) | 데이터를 담는 표. 데이터베이스 안에 여러 개 존재 |
| 열(Column) | 테이블의 세로 방향. 데이터의 종류 |
| 행(Row) | 테이블의 가로 방향. 데이터 한 건 |
| 값(Value) | 열과 행이 만나는 칸 하나의 데이터 |
| SQL | 데이터베이스에서 데이터를 꺼낼 때 쓰는 언어 |
| 쿼리(Query) | SQL로 작성한 요청 문장 하나 |
| 세미콜론(;) | SQL 문장의 끝을 알리는 기호 |
| 주석(--) | 실행되지 않는 설명 줄 |
준비 완료
세 가지를 알았습니다.
- 준비 1 — 데이터는 표(테이블)에 저장된다 ✓
- 준비 2 — 표가 여러 개인 이유는 중복을 없애기 위해서다 ✓
- 준비 3 — 세미콜론, 대문자, 따옴표, 줄바꿈, 주석 ✓
이제 진짜 시작입니다.
김민서 사원 : 생각보다 간단하네요. 표 두 개, 규칙 다섯 개. 이 정도면 시작할 수 있겠어요.
박지수 팀장 : 맞아요. 나머지는 직접 쳐보면서 익히는 거예요. 원칙 1부터 시작해봅시다. 첫 번째 질문은 이거예요. "나는 어떤 테이블을 선택해서 어떤 열을 보고 싶은가?"
▶ 원칙 1 — SELECT, FROM : 어떤 테이블에서 어떤 열을 볼까?