SQL 쿼리 프롬프트가 정말로 편한 지점은 쿼리를 잘 못 쓰는 사람도 데이터베이스에서 직접 숫자를 꺼낼 수 있다는 데 있습니다. 하지만 "지난달 매장별 매출을 알려 줘"라고만 물으면 AI는 테이블 이름과 항목 이름을 추측할 수밖에 없고, 틀리면 오류가 나거나, 더 곤란하게는 겉보기엔 그럴듯하지만 집계 기준이 전혀 엉뚱한 숫자가 돌아옵니다. 아래 프롬프트는 테이블 구조와 데이터베이스 종류를 먼저 건네고, "쿼리만 쓸 것, 항목을 지어내지 말 것, 대조 방법부터 제시할 것"을 규칙으로 못 박아 둡니다. 복사해서 변수만 채우면 바로 쓸 수 있습니다.
시작하기 전에 이 세 가지를 준비하세요
- 테이블 구조: CREATE TABLE 문도 좋고, 항목 이름과 형에 한 줄 설명을 붙인 항목 목록도 됩니다. 테이블이 두 개 이상 연결된다면 어떤 항목으로 연결하는지 표시하세요. 구조를 도저히 구할 수 없을 때는 AI가 무엇이 부족한지 되묻게 하고, 추측으로 쓰게 두지 마세요.
- 데이터베이스 종류: MySQL, PostgreSQL, SQL Server, SQLite 중 하나를 명시하세요. 날짜 함수와 페이징 문법이 제품마다 달라서, 적지 않으면 AI가 기본으로 삼은 방언이 다른 제품에서 오류를 냅니다.
- 결과의 모양: 예시 행 하나를 주거나, 어떤 열이 필요한지, 정렬 기준, 집계 여부를 분명히 하세요. "매출을 조회해 줘"라는 한마디도 합계, 날짜별, 매장별로 완전히 다른 세 개의 쿼리가 될 수 있습니다.
데이터가 아직 데이터베이스가 아니라 스프레드시트 파일 안에 있다면 SQL로 돌아가지 말고, AI에게 Excel 데이터를 분석시키는 프롬프트로 표를 직접 분석하는 편이 빠릅니다. 데이터가 데이터베이스에 들어가 반복해서 꺼내야 할 때 이 글로 돌아오세요.
이 프롬프트를 그대로 복사하세요
# 역할
당신은 {{데이터베이스 종류}}에 능숙한 데이터 분석가입니다. 쿼리는 제가 준 테이블 구조만을 근거로 쓰고, 구조에 없는 항목은 추측하지 마세요. 정보가 부족하면 먼저 저에게 질문하세요.
# 입력
데이터베이스 종류: {{데이터베이스 종류}}
테이블 구조: {{테이블 구조}}
알고 싶은 것: {{알고 싶은 것}}
집계 기준: {{집계 기준}}
# 규칙
1. SELECT 쿼리만 쓰고, 데이터를 추가, 삭제, 수정하는 문장은 쓰지 말 것;
2. 테이블 구조에 등장한 테이블 이름과 항목 이름만 쓸 것. 질문에서 분명하지 않은 조건이 있으면 임의로 정하지 말고, 애매한 점을 나열해서 저에게 물을 것;
3. 기간은 집계 기준대로 처리하고, 어떤 시간 항목을 썼는지, 시작일과 종료일을 포함하는지 명시할 것;
4. 금액과 건수에서는 집계 방식(합계, 건수, 중복 제거 건수)을 밝힐 것. 빈 값의 처리는 집계 기준을 따르고, 기준에 없으면 먼저 물을 것;
5. 먼저 건수를 대조할 확인용 쿼리를 주고, 제가 건수를 확인한 뒤에 본 쿼리를 줄 것;
6. 본 쿼리 뒤에는 각 부분이 무엇을 하는지 차례로 설명하고, 결과에서 특히 대조해야 할 열을 짚어 줄 것.
# 출력 형식
먼저 저에게 확인이 필요한 질문(없으면 "없음");
다음으로 대조용 건수 쿼리;
다음으로 본 쿼리를 코드 블록에 담아서;
마지막으로 부분별 설명과, 결과 한 행을 손으로 검증하는 방법 하나.주문 테이블이라면 변수는 이렇게 채워집니다
- {{데이터베이스 종류}}: MySQL 8.0
- {{테이블 구조}}: orders 테이블, 항목은 order_id(주문 번호), store_name(매장), amount(금액), pay_time(결제 시간), status(상태, paid는 결제 완료, refunded는 환불 완료)
- {{알고 싶은 것}}: 지난달에 대해 매장별로 결제 완료 주문의 총금액과 건수를 총금액이 높은 순으로 정렬
- {{집계 기준}}: status가 paid인 주문만 셉니다. 기간은 pay_time 기준이며 지난달은 직전 달력 월을 뜻합니다. 금액이 빈 주문은 합계에 넣지 않되, 그런 주문이 몇 건인지 설명에서 알려 주세요
이렇게 채우고 나면 AI가 먼저 돌려주는 대조용 쿼리가 핵심 단계입니다. 데이터베이스에서 실행해 업무 시스템에서 내보낸 주문 건수와 맞춰 보세요. 숫자가 맞아야 본 쿼리를 실행합니다. 맞지 않으면 기준이나 시간 항목을 잘못 이해한 것이니, 쿼리 본문보다 기준을 먼저 고치는 편이 빠릅니다.
결과가 나오면 쓰기 전에 이 세 단계로 검증하세요
- 합계를 맞추기: 본 결과의 매장별 건수를 모두 더하면 대조용 쿼리의 숫자와 일치해야 합니다. 일치하지 않는 가장 흔한 원인은 조인이 행 수를 부풀려 주문 한 건이 여러 번 세어지는 것입니다.
- 한 행을 손으로 다시 계산하기: 매장 하나를 골라 필터나 가장 단순한 별도 쿼리로 소계를 따로 계산하세요. 둘이 일치해야 집계 기준이 어긋나지 않았다고 말할 수 있습니다.
- 경계 보기: 결과에서 가장 이른 시간과 가장 늦은 시간을 확인해 하루가 더 들어갔거나 빠지지 않았는지 보세요. 금액이 빈 행이나 상태가 이상한 행이 조용히 포함되지 않았는지도 살펴보세요.
오류가 나거나 숫자가 이상하면 이렇게 이어서 물어보세요
- 오류가 날 때: "오류 원문은 이렇습니다: {{오류 원문}}. 실패한 부분만 고치고 나머지는 그대로 두고, 무엇을 고쳤는지 알려 주세요."
- 숫자가 지나치게 클 때: "결과가 예상보다 약 {{배수}}배 큽니다. 조인 때문에 행 수가 부풀지 않았는지 확인하고, 중복으로 셀 만한 지점을 하나씩 나열해 주세요."
- 너무 느릴 때: "이 쿼리는 {{데이터량}} 규모의 데이터에서 {{실행 시간}}이 걸렸습니다. 결과를 바꾸지 말고 다시 쓰고, 어떤 항목에 인덱스를 걸어야 할지 알려 주세요."
이 세 가지 후속 지시는 모두 현장 정보(오류 원문, 배수, 데이터량)를 담고 있어서 AI가 한 지점만 정확히 고칠 수 있습니다. "틀렸어, 다시 해 줘" 한마디만으로는 쿼리 전체를 뜯어고치며 다시 추측하게 되고, 고칠수록 점점 더 어긋납니다.