본문 바로가기

준비 — SQL을 쓰기 전에 딱 한 챕터만

준비 — SQL을 쓰기 전에 딱 한 챕터만

박지수 팀장 : 민서씨, SQL 바로 시작하고 싶죠? 그전에 딱 세 가지만 알고 가요. 데이터가 어떻게 생겼는지, 왜 여러 표로 나뉘어 있는지, 코드 쓸 때 규칙이 뭔지. 이것만 알면 첫 줄 바로 쓸 수 있어요.

이 챕터는 SQL을 배우기 위한 최소한의 준비입니다. 세 가지만 짚고 넘어갑니다.

  • 준비 1 — 데이터는 표에 저장된다
  • 준비 2 — 표가 여러 개인 이유
  • 준비 3 — 코드를 쓸 때 지키는 규칙 5가지

이 세 가지를 알고 나면 원칙 1로 바로 넘어갑니다.

준비 1 — 데이터는 표에 저장된다

카페를 운영하면 매일 이런 사실들이 생겨납니다.

  • 오늘 아메리카노가 32잔 팔렸다
  • 김준호 씨가 오늘 두 번째 방문이다
  • 오후 3시에 주문이 가장 몰렸다

이 사실 하나하나가 데이터입니다.

데이터는 그냥 두면 사라집니다. 그래서 기록해야 합니다. 가장 쉬운 방법은 표로 만드는 것입니다.

표의 구조

아래는 고객 정보를 정리한 표입니다.

id이름나이등급지역
1이하린28GOLD서울
2김준호35VIP경기
3박소연22SILVER서울
4최민재41VIP인천
5정유진30GOLD경기

이 표에서 알아야 할 용어는 딱 세 가지입니다.

  • 열(Column) — 세로 방향. 데이터의 종류. 이름, 나이, 등급이 각각 하나의 열입니다.
  • 행(Row) — 가로 방향. 데이터 한 건. 이하린에 관한 정보 전체가 하나의 행입니다.
  • 값(Value) — 열과 행이 만나는 칸 하나. 이하린의 나이인 28이 하나의 값입니다.

엑셀로 치면 이렇습니다.

엑셀데이터베이스
표시트테이블
세로열열(Column)
가로행행(Row)

엑셀이 있는데 왜 데이터베이스를 쓸까

매장이 1개, 하루 주문이 수십 건일 때는 엑셀로 충분합니다.

그런데 매장이 25개가 되면? 파일이 25개가 되고, 누가 어떤 파일을 고쳤는지 알 수 없게 됩니다.

하루 주문이 수천 건이 되면? 파일을 여는 데만 몇 분이 걸립니다.

엑셀데이터베이스
데이터 양수만 건까지 무난수천만 건도 빠름
동시 접근한 명만 수정 가능여러 명이 동시에 가능
실수 방지없음잘못된 값 자동 차단

이 차이 때문에 데이터베이스를 씁니다.

그리고 데이터베이스에 저장된 표에서 원하는 데이터를 꺼낼 때 쓰는 언어가 SQL입니다.

이 책의 실습 표 두 개

이 책에서는 표가 딱 두 개만 나옵니다.

고객정보 테이블 (6명의 샘플)

id이름나이등급지역
1이하린28GOLD서울
2김준호35VIP경기
3박소연22SILVER서울
4최민재41VIP인천
5정유진30GOLD경기
6한지수25SILVER서울

판매정보 테이블 (8건의 샘플)

id고객id메뉴금액날짜
12아메리카노4,5002024-01-03
21딸기케이크6,5002024-01-05
33카페라떼5,5002024-01-07
44아메리카노4,5002024-01-10
51카페라떼5,5002024-01-12
62딸기케이크6,5002024-01-15
73아메리카노4,5002024-01-18
85카페라떼5,5002024-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메뉴
12아메리카노
22아메리카노
32카페라떼

이제 김준호 씨의 등급이 바뀌면 고객정보 표의 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 : 어떤 테이블에서 어떤 열을 볼까?