같은 질문, 완전히 다른 SQL —
AI에게 꼭 줘야 할 3가지
섹션 5 시작입니다. 지금까지는 "AI가 SQL을 짜주는 시대"라고 말만 했지, 어떻게 시켜야 정확한 SQL이 나오는지는 본격적으로 안 다뤘죠. 출발점은 단 3가지 — 스키마, 샘플 데이터, 원하는 결과 형태. 이 강의가 끝나면 3가지를 외운 채로 여러분 작업에 바로 적용할 수 있습니다.
이번 섹션의 여정
2-4에서 AI 과외 선생님을 만들 때 “어떤 정보를 줘야 AI가 제일 잘하는지는 5-1에서 제대로 배운다” 고 예고했었죠 — 그 약속을 지키는 강의입니다. 이제부터 다섯 강 동안, AI에게 제대로 시키는 법을 다룹니다. 같은 질문도 어떻게 던지냐에 따라 결과가 완전히 달라지거든요.
지금 여기
스키마를 주는 형식
실전 비교
복잡한 요청 쪼개기
요구사항 → SQL → 검증
AI 결과 의심하기
결론부터 — 꼭 줘야 하는 3가지
AI에게 SQL을 시킬 때 꼭 줘야 하는 3가지. 외우세요.
이 3가지가 다 들어가면 — AI가 거의 안 틀립니다. 하나라도 빠지면 — 결과를 의심해야 합니다.
왜 이 3가지인지, 지금부터 하나씩 뜯어볼게요.
① 스키마 — 테이블·컬럼·PK/FK
스키마는 “어떤 테이블이 있고, 그 테이블에 어떤 컬럼들이 있는지” 입니다. 2-4에서 본 것처럼 — AI는 세상의 ‘보통 쇼핑몰’을 학습했을 뿐, 여러분의 DB는 모릅니다. 그래서 지도를 먼저 쥐여줘야 해요. 가장 정확한 방법은 CREATE TABLE 문을 약식으로 정리해서 던지기입니다.
[테이블 구조]
- members (회원): member_id PK, member_name, gender, age, joined_at
- orders (주문): order_id PK, member_id FK → members, ordered_at
- order_items (주문상세): order_id FK, product_id FK, quantity
- products (상품): product_id PK, product_name, price, category_id FK
- categories (카테고리): category_id PK, category_name컬럼 이름만 나열하면 반쪽짜리예요. 어떤 컬럼이 PK이고, 어떤 FK가 어느 테이블을 가리키는지까지 적어야 AI가 JOIN을 정확하게 짭니다. 4-2 부모-자식에서 배운 그 관계 정보가 — 여기서 AI에게 그대로 전달되는 겁니다.
② 샘플 데이터 — 값의 생김새 보여주기
스키마만 줘도 SQL은 짜집니다. 근데 — 데이터가 어떻게 생겼는지 모르면 종종 엉뚱한 답이 나와요.
AI는 값의 생김새를 추측합니다
gender 컬럼이 ‘M’/‘F’인지 ‘남’/‘여’인지 — AI가 어떻게 알아요? 모르면 추측합니다. WHERE gender = ‘남’ 같은, 문법은 맞는데 결과는 0건인 쿼리 — 그게 사고입니다.
형식·범위·단위까지 읽어냅니다
아래처럼 몇 행만 보여줘도 AI는 “아, gender는 M/F구나. price는 정수(원)구나” 알아챕니다. 값의 형식·범위·NULL 여부 — 전부 추측이 아니라 근거가 됩니다.
샘플은 각 테이블당 3~5행이면 충분합니다. 테이블 전체를 부을 필요가 없어요.
[샘플 데이터]
members:
1, 김철수, M, 35, 2025-01-15
2, 이영희, F, 28, 2025-02-03
products:
1, 라운드 티셔츠, 19000, 1
9, 무선 이어폰, 89000, 2DBeaver에서 SELECT * FROM members LIMIT 5; 한 번이면 끝입니다. 결과 표에서
몇 행 복사해 붙이면 — 그게 그대로 샘플 데이터예요.
③ 원하는 결과 형태 — 구체성이 곧 정확성
마지막은 “어떤 모양의 결과를 받고 싶은가” 를 구체적으로 말하는 것. 여기서 차이가 제일 크게 납니다.
”매출 보여줘”
전체 합계? 카테고리별? 월별? 컬럼은 몇 개? — AI가 알아서 정해버립니다. 그 ‘알아서’가 여러분이 원한 것과 같을 확률은 복불복이에요.
“카테고리별 총 매출. 출력 컬럼: 카테고리명, 총매출. 매출 많은 순. TOP 5.”
집계 단위, 출력 컬럼, 정렬, 행 수까지 — 해석의 여지가 없습니다. AI의 SQL이 짧고 정확해집니다.
구체적으로 명시할 항목은 이 다섯 가지입니다.
| 항목 | 예시 |
|---|---|
| 출력 컬럼 | ”카테고리명, 총매출” |
| 정렬 | ”매출 많은 순” |
| 행 수 제한 | ”TOP 5” |
| 필터 조건 | ”2025년 이후 주문만” |
| 집계 단위 | ”카테고리별” |
구체성 = 정확성. 결과 형태가 명확할수록 AI의 SQL은 짧아지고, 정확해집니다.
3가지 종합 — 모범 프롬프트와 검증
이제 3가지를 한 프롬프트에 다 넣어볼게요. 우리 shop DB 기준의 완성형입니다.
[테이블 구조]
- members (회원): member_id PK, member_name, gender (M/F), age, joined_at
- orders (주문): order_id PK, member_id FK, ordered_at
- order_items (주문상세): order_id FK, product_id FK, quantity
- products (상품): product_id PK, product_name, price, category_id FK
- categories (카테고리): category_id PK, category_name
[부모-자식 관계]
- members 1:N orders
- orders 1:N order_items
- products 1:N order_items
- categories 1:N products
[샘플 데이터]
members: (1, 김철수, M, 35, '2025-01-15'), (2, 이영희, F, 28, '2025-02-03')
orders: (1, 1, '2025-02-01'), (2, 2, '2025-02-15')
order_items: (1, 1, 1), (1, 16, 2)
products: (1, '라운드 티셔츠', 19000, 1), (16, '프리미엄 그래놀라', 12000, 3)
[요구사항]
카테고리별 총 매출 TOP 3.
- 매출 = price × quantity 의 합
- 출력 컬럼: 카테고리명, 총매출
- 매출 많은 순으로 정렬
- 행 수 최대 3개[테이블 구조] · [샘플 데이터] · [요구사항] 세 칸만 갈아끼우면 어떤 DB에서든 재사용할 수 있는 템플릿입니다. 메모장에 복사해두고 AI에게 SQL을 시킬 때마다 꺼내 쓰세요.
이 프롬프트를 ChatGPT나 Claude에 던지면 — 거의 정확하게 이런 SQL이 돌아옵니다.
SELECT
c.category_name,
SUM(p.price * oi.quantity) AS total_sales
FROM
order_items oi
JOIN products p
ON p.product_id = oi.product_id
JOIN categories c
ON c.category_id = p.category_id
GROUP BY
c.category_name
ORDER BY
total_sales DESC
LIMIT 3;받은 SQL을 그대로 DBeaver에 붙여 실행하면 — 검증도 1초입니다.
| category_name | total_sales |
|---|---|
| 의류 | 1107000 |
| 전자기기 | 857000 |
| 뷰티 | 510000 |
한눈에 정리
| # | 무엇을 | 핵심 | 어디서 가져오나 |
|---|---|---|---|
| 1 | 스키마 | 테이블 + 컬럼 + PK/FK | 4-2 부모-자식 · ERD |
| 2 | 샘플 데이터 | 각 테이블당 3~5행 | SELECT * FROM 테이블 LIMIT 5 |
| 3 | 원하는 결과 형태 | 출력 · 정렬 · 행 수 · 필터 | 비즈니스 요구사항을 문장으로 정리 |
스키마 · 샘플 데이터 · 원하는 결과 형태. 3가지가 다 들어가면 AI가 거의 안 틀리고 — 하나라도 빠지면 결과를 의심합니다.
자주 막히는 지점
테이블이 5개를 넘어가면 일일이 치기 부담스럽죠. 다만 약식 포맷은 가볍고 핵심만 담겨서, AI가 길을 잃지 않는 장점이 있습니다.
AI에게 필요한 건 진짜 값이 아니라 값의 생김새입니다. 형식·범위·단위만 유지되면 효과는 동일해요.
3가지는 “거의 안 틀리게” 만드는 장치지, 100% 보장이 아닙니다. JOIN 뻥튀기 같은 함정은 여전히 숨어들 수 있어요.
다음 강의에서는 3가지 중 첫 번째, 스키마를 주는 형식을 깊게 팝니다. ERD·테이블 정의를 어떤 포맷으로 던져야 AI가 가장 정확한지 — 실전 포맷을 정리해드릴게요. 그 전에, 오늘 배운 3가지를 연습 문제로 손에 익히고 가세요.