연습문제 카탈로그 (검토용)
이 문서는 실제 배포되지 않습니다. 문제 작성 전 목록을 검토하기 위한 기획 문서입니다.
설계 원칙
- 모든 문제는 TechShop 샘플 DB(ecommerce-ko.db)로 검증 가능
- 해당 난이도까지 배운 개념만 사용 (초급 문제에 JOIN 없음 등)
- 각 문제에 접힌 힌트 + 접힌 정답 + 결과 예시 제공
- 개념당 최소 3문제 (기초 → 응용 → 실전)
사용 가능 테이블 (30개)
| 테이블 | 행 수 | 주요 용도 |
|---|---|---|
| products | 280 | 상품 (가격, 재고, specs JSON) |
| categories | 53 | 카테고리 (parent_id 계층) |
| suppliers | 60 | 공급업체 |
| customers | 5,230 | 고객 (등급, 포인트, 가입채널) |
| customer_addresses | 8,554 | 배송 주소 |
| orders | 34,908 | 주문 (상태, 금액) |
| order_items | 84,270 | 주문 상세 (수량, 단가) |
| payments | 34,908 | 결제 (방법, 상태) |
| shipping | 33,107 | 배송 (택배사, 추적번호) |
| reviews | 7,945 | 리뷰 (평점, 내용) |
| returns | 936 | 반품/교환 |
| complaints | 3,477 | 불만 접수 |
| wishlists | 1,999 | 위시리스트 |
| carts / cart_items | 3,000 / 9,037 | 장바구니 |
| product_qna | 946 | 상품 Q&A (parent_id 답변) |
| inventory_transactions | 14,331 | 입출고 이력 |
| point_transactions | 130,149 | 포인트 적립/사용 |
| product_views | 299,792 | 상품 조회 이력 |
| product_prices | 829 | 가격 변경 이력 |
| product_images | 748 | 상품 이미지 |
| product_tags / tags | 1,288 / 46 | 태그 (M:N) |
| promotions / promotion_products | 129 / 6,871 | 프로모션 |
| coupons / coupon_usage | 20 / 111 | 쿠폰 |
| customer_grade_history | 10,273 | 등급 변경 이력 |
| calendar | 3,469 | 날짜 참조 (공휴일, 주말) |
| staff | 5 | 직원 (manager_id 계층) |
초급 (100문제, 4세트)
세트 1: 상품 탐색 (25문제)
사용 테이블: products, categories, suppliers
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | SELECT * | 상품 테이블의 모든 칼럼 조회 |
| 2 | 기초 | SELECT 칼럼 | 상품명, 가격, 재고만 조회 |
| 3 | 기초 | WHERE = | 특정 브랜드 상품 조회 |
| 4 | 기초 | WHERE <> | 특정 카테고리 제외 조회 |
| 5 | 기초 | WHERE > | 가격 100만원 초과 상품 |
| 6 | 기초 | WHERE BETWEEN | 가격 50만~100만원 상품 |
| 7 | 기초 | WHERE IN | 여러 브랜드 동시 검색 |
| 8 | 기초 | WHERE LIKE % | 이름에 'Gaming' 포함 상품 |
| 9 | 기초 | WHERE LIKE _ | 이름이 정확히 N글자인 상품 |
| 10 | 기초 | AND / OR | 활성이고 재고 10개 이상인 상품 |
| 11 | 기초 | ORDER BY | 가격 내림차순 정렬 |
| 12 | 기초 | LIMIT | 가장 비싼 상품 5개 |
| 13 | 기초 | LIMIT OFFSET | 가격순 11~20위 상품 |
| 14 | 기초 | DISTINCT | 상품에 등록된 브랜드 목록 |
| 15 | 기초 | AS (별칭) | 가격을 '판매가'로 표시 |
| 16 | 응용 | 산술 연산 | 마진(price - cost_price) 계산 |
| 17 | 응용 | 산술 + ORDER | 마진율 높은 순 정렬 |
| 18 | 응용 | WHERE + ORDER + LIMIT | 재고 부족(10 이하) 활성 상품, 재고순 |
| 19 | 응용 | NOT IN | 특정 3개 카테고리 제외 |
| 20 | 응용 | LIKE + AND | 'ASUS' 브랜드이면서 이름에 'ROG' 포함 |
| 21 | 실전 | 복합 조건 | 비활성이고 단종된 상품 중 재고 남은 것 |
| 22 | 실전 | OR + 괄호 | (ASUS 또는 MSI)이고 가격 200만 이상 |
| 23 | 실전 | NOT LIKE | 이름에 '블랙'이 없는 상품 |
| 24 | 실전 | BETWEEN + LIKE | 가격 50~200만이고 이름에 숫자 포함 |
| 25 | 실전 | 종합 | 활성 상품 중 재고 50개 이상, 마진 20% 이상, 가격순 상위 10 |
세트 2: 고객 분석 (25문제)
사용 테이블: customers
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | COUNT(*) | 전체 고객 수 |
| 2 | 기초 | COUNT + WHERE | 활성 고객 수 |
| 3 | 기초 | COUNT(DISTINCT) | 고유 등급 수 |
| 4 | 기초 | SUM | 전체 고객 포인트 합계 |
| 5 | 기초 | AVG | 평균 포인트 잔액 |
| 6 | 기초 | MIN / MAX | 최소/최대 포인트 |
| 7 | 기초 | GROUP BY | 등급별 고객 수 |
| 8 | 기초 | GROUP BY + SUM | 등급별 포인트 합계 |
| 9 | 기초 | GROUP BY + AVG | 등급별 평균 포인트 |
| 10 | 기초 | GROUP BY + ORDER | 등급별 고객 수, 많은 순 |
| 11 | 응용 | HAVING | 가입채널별 100명 이상인 채널 |
| 12 | 응용 | HAVING + ORDER | 등급별 평균 포인트 1000 이상, 내림차순 |
| 13 | 응용 | COUNT + WHERE + GROUP | 활성 고객만 성별 분포 |
| 14 | 응용 | ROUND + AVG | 등급별 평균 포인트 (정수) |
| 15 | 응용 | COUNT(*) - COUNT(col) | birth_date가 NULL인 고객 비율 |
| 16 | 실전 | 다중 GROUP BY | 등급+성별 교차 집계 |
| 17 | 실전 | HAVING + 복합 | 가입채널별 VIP 10명 이상인 채널 |
| 18 | 실전 | 집계 조합 | 등급별 COUNT, AVG(point), MIN(point), MAX(point) |
| 19 | 실전 | WHERE + GROUP + HAVING | 2023년 이후 가입, 등급별 50명 이상 |
| 20 | 실전 | 종합 집계 | acquisition_channel별 활성률(활성/전체*100) |
| 21 | 기초 | IS NULL | 생년월일 미입력 고객 |
| 22 | 기초 | IS NOT NULL | 마지막 로그인 기록 있는 고객 |
| 23 | 응용 | COALESCE | gender가 NULL이면 '미지정'으로 표시 |
| 24 | 응용 | NULL 집계 | 각 칼럼별 NULL 건수 |
| 25 | 실전 | NULL + GROUP | 성별(NULL 포함) 등급 분포 |
세트 3: 주문 기초 (25문제)
사용 테이블: orders, payments
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | SELECT + WHERE | 특정 상태 주문 조회 |
| 2 | 기초 | COUNT | 전체 주문 수 |
| 3 | 기초 | WHERE + 날짜 | 2024년 주문 조회 (LIKE '2024%') |
| 4 | 기초 | SUM | 2024년 총 매출 |
| 5 | 기초 | AVG | 평균 주문 금액 |
| 6 | 기초 | GROUP BY | 상태별 주문 수 |
| 7 | 기초 | GROUP BY + SUM | 상태별 매출 합계 |
| 8 | 기초 | ORDER BY + LIMIT | 최대 금액 주문 10건 |
| 9 | 기초 | DISTINCT | 고유 주문 상태 목록 |
| 10 | 기초 | BETWEEN | 금액 100만~500만 주문 |
| 11 | 응용 | CASE | 금액 구간별 분류 (소액/중액/대액) |
| 12 | 응용 | CASE + GROUP | 금액 구간별 주문 수 집계 |
| 13 | 응용 | CASE + 상태 | 상태를 한글로 변환하여 표시 |
| 14 | 응용 | GROUP BY 날짜 | 월별 주문 수 (SUBSTR) |
| 15 | 응용 | GROUP BY + HAVING | 월별 매출 10억 이상인 월 |
| 16 | 응용 | NULL 처리 | cancelled_at이 NULL이 아닌 주문 |
| 17 | 응용 | COALESCE | notes가 NULL이면 '없음' 표시 |
| 18 | 실전 | 다중 CASE | 상태 + 금액 동시 분류 |
| 19 | 실전 | payments 기초 | 결제 방법별 건수 (payments 테이블) |
| 20 | 실전 | payments + GROUP | 결제 방법별 평균 금액 |
| 21 | 실전 | 복합 WHERE | 2024년, 취소 아닌, 100만 이상 주문 |
| 22 | 실전 | COUNT + CASE | 상태별 비율 (취소율 등) |
| 23 | 실전 | 연도별 추이 | 연도별(SUBSTR) 주문 수와 매출 |
| 24 | 실전 | 종합 | 월별 주문수, 매출, 평균단가, 취소건수 |
| 25 | 실전 | 종합 | card 결제 중 2024년, 금액 순 상위 10 |
세트 4: SQL 오류 찾기 — 초급 (25문제)
사용 테이블: products, customers, orders
| # | 난이도 | 오류 유형 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | 구문 | SELECT 뒤 칼럼 사이 콤마 누락 |
| 2 | 기초 | 구문 | FROM 절 누락 |
| 3 | 기초 | 구문 | WHERE 절에 = 대신 == 사용 |
| 4 | 기초 | 구문 | 문자열 값에 따옴표 누락 |
| 5 | 기초 | 구문 | GROUP BY 없이 집계+비집계 혼합 |
| 6 | 기초 | 논리 | WHERE name = NULL (IS NULL이어야) |
| 7 | 기초 | 논리 | HAVING을 WHERE 대신 사용 |
| 8 | 기초 | 논리 | ORDER BY를 GROUP BY 앞에 배치 |
| 9 | 기초 | 논리 | COUNT(col)이 NULL을 세지 않는 문제 |
| 10 | 기초 | 논리 | LIKE '%abc' 에서 인덱스 미사용 |
| 11 | 응용 | 논리 | OR 우선순위 오류 (괄호 필요) |
| 12 | 응용 | 논리 | 정수 나눗셈 (취소율 0%로 나옴) |
| 13 | 응용 | 논리 | GROUP BY 칼럼과 SELECT 불일치 |
| 14 | 응용 | 논리 | DISTINCT + ORDER BY 칼럼 불일치 |
| 15 | 응용 | 논리 | LIMIT 없이 큰 테이블 전체 조회 |
| 16 | 응용 | 결과 | AVG가 기대와 다름 (NULL 제외 때문) |
| 17 | 응용 | 결과 | BETWEEN 경계값 포함 여부 |
| 18 | 응용 | 결과 | LIKE 대소문자 민감도 |
| 19 | 실전 | 복합 | WHERE + GROUP BY + HAVING 순서 |
| 20 | 실전 | 복합 | CASE 문에 ELSE 빠짐 → NULL |
| 21 | 실전 | 복합 | 별칭을 WHERE에서 사용 (불가) |
| 22 | 실전 | 복합 | SUM(CASE...) 에서 0 vs NULL |
| 23 | 실전 | 복합 | COALESCE 인자 타입 불일치 |
| 24 | 실전 | 복합 | SUBSTR 인덱스 0 vs 1 |
| 25 | 실전 | 복합 | 날짜 비교에서 시간 부분 누락 |
중급 (200문제, 10세트)
세트 1: JOIN 마스터 (25문제)
사용 테이블: orders, customers, order_items, products, categories, suppliers, shipping, staff
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | INNER JOIN 2테이블 | 주문 + 고객명 |
| 2 | 기초 | INNER JOIN 2테이블 | 주문항목 + 상품명 |
| 3 | 기초 | INNER JOIN 2테이블 | 상품 + 카테고리명 |
| 4 | 기초 | INNER JOIN 2테이블 | 상품 + 공급업체명 |
| 5 | 기초 | INNER JOIN 3테이블 | 주문 + 고객 + 주문항목 |
| 6 | 기초 | INNER JOIN 3테이블 | 주문항목 + 상품 + 카테고리 |
| 7 | 기초 | INNER JOIN + WHERE | 배송완료 주문의 고객명 |
| 8 | 기초 | INNER JOIN + GROUP | 고객별 주문 수 |
| 9 | 응용 | LEFT JOIN 기초 | 리뷰 없는 상품 포함 |
| 10 | 응용 | LEFT JOIN + IS NULL | 한번도 주문 안 한 고객 |
| 11 | 응용 | LEFT JOIN + IS NULL | 리뷰 없는 상품 |
| 12 | 응용 | LEFT JOIN + COUNT | 상품별 리뷰 수 (0 포함) |
| 13 | 응용 | JOIN + 집계 | 카테고리별 매출 합계 |
| 14 | 응용 | JOIN + 집계 | 공급업체별 판매 수량 |
| 15 | 응용 | JOIN + 집계 | 택배사별 배송 건수 |
| 16 | 응용 | JOIN + HAVING | 주문 5건 이상 고객 |
| 17 | 실전 | 4테이블 JOIN | 주문+고객+항목+상품+카테고리 |
| 18 | 실전 | JOIN + 날짜 필터 | 2024년 카테고리별 월간 매출 |
| 19 | 실전 | JOIN + CASE | 주문 상태별 고객 등급 분포 |
| 20 | 실전 | 안티 조인 | 위시리스트에 있지만 주문 안 된 상품 |
| 21 | 실전 | 다중 JOIN + 집계 | 직원별 처리 주문 수, 매출 |
| 22 | 실전 | JOIN + ROUND | 카테고리별 평균 마진율 |
| 23 | 실전 | JOIN + TOP-N | 공급업체별 가장 비싼 상품 |
| 24 | 실전 | 종합 | 고객등급별 평균 주문금액, 평균 주문간격 |
| 25 | 실전 | 종합 | 매출 상위 10 상품의 카테고리, 공급업체, 리뷰 수 |
세트 2: 날짜/시간 분석 (20문제)
사용 테이블: orders, customers, shipping, reviews, calendar
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | SUBSTR 연도 | 연도별 주문 수 |
| 2 | 기초 | SUBSTR 월 | 2024년 월별 매출 |
| 3 | 기초 | DATE 함수 | 오늘 날짜 조회 |
| 4 | 기초 | 날짜 필터 | 최근 30일 주문 |
| 5 | 응용 | julianday | 주문~배송 소요일 |
| 6 | 응용 | julianday | 고객 나이 계산 |
| 7 | 응용 | strftime 요일 | 요일별 주문 수 |
| 8 | 응용 | strftime 시간 | 시간대별 주문 분포 |
| 9 | 응용 | 날짜 더하기 | 주문일+14일 = 환불 기한 |
| 10 | 응용 | start of month | 월초 기준 매출 집계 |
| 11 | 응용 | 주차 | 주차별 주문 수 |
| 12 | 응용 | 분기 | 분기별 매출 |
| 13 | 응용 | 날짜 포맷 | 한국식 날짜 형식 |
| 14 | 실전 | calendar JOIN | 주문 없는 날 찾기 |
| 15 | 실전 | calendar + CASE | 공휴일/주말/평일 매출 비교 |
| 16 | 실전 | 기간 비교 | 전월 대비 매출 증감 |
| 17 | 실전 | 가입~첫주문 | 고객별 가입 후 첫 주문까지 일수 |
| 18 | 실전 | 택배사별 평균배송일 | 택배사별 평균 소요일 |
| 19 | 실전 | 연도별 신규고객 | 연도별 신규 가입자 수 추이 |
| 20 | 실전 | 종합 | 월별 주문수, 매출, 신규고객, 평균배송일 |
세트 3: 문자열/숫자 함수 (20문제) — 신규
사용 테이블: products, customers, orders, order_items
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | LENGTH | 상품명 길이 분포 |
| 2 | 기초 | UPPER / LOWER | 이메일 소문자 정규화 |
| 3 | 기초 | SUBSTR | 주문번호에서 날짜 부분 추출 |
| 4 | 기초 | REPLACE | 전화번호 하이픈 제거 |
| 5 | 기초 | 문자열 연결 | 고객 연락처 카드 만들기 |
| 6 | 응용 | INSTR | 이메일에서 도메인 추출 |
| 7 | 응용 | TRIM | 공백 있는 상품명 찾기 |
| 8 | 응용 | COALESCE + 연결 | NULL 안전 문자열 조합 |
| 9 | 응용 | GROUP_CONCAT | 카테고리별 상품명 목록 |
| 10 | 응용 | printf / LPAD | 고객 ID 0-패딩 |
| 11 | 응용 | GLOB / REGEXP | 모델번호 패턴 매칭 |
| 12 | 응용 | ROUND | 평균 가격 천원 단위 반올림 |
| 13 | 응용 | ABS | 원가-판매가 차이 절댓값 |
| 14 | 응용 | MOD | 짝수/홀수 ID 그룹 분리 |
| 15 | 실전 | CAST | 문자→숫자 변환 후 정렬 |
| 16 | 실전 | NULLIF | 0으로 나누기 방지 비율 |
| 17 | 실전 | IIF / CASE | 가격 등급 분류 |
| 18 | 실전 | SUBSTR + 집계 | 주문번호 월별 추출 + 집계 |
| 19 | 실전 | 문자열 종합 | SKU 패턴 분석 (접두어별 상품 수) |
| 20 | 실전 | 종합 | 고객 코드(C-000042) 생성 + 연락처 포맷팅 |
세트 4: 서브쿼리 (20문제)
사용 테이블: products, customers, orders, order_items, reviews
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | WHERE 서브쿼리 | 평균 가격 이상 상품 |
| 2 | 기초 | IN 서브쿼리 | VIP 고객의 주문 |
| 3 | 기초 | NOT IN 서브쿼리 | 주문 없는 고객 |
| 4 | 기초 | 스칼라 서브쿼리 | 전체 평균과 비교 |
| 5 | 응용 | FROM 서브쿼리 | 고객별 주문수 → 상위 10 |
| 6 | 응용 | FROM 서브쿼리 | 카테고리별 평균가격 |
| 7 | 응용 | 상관 서브쿼리 | 카테고리 내 평균보다 비싼 상품 |
| 8 | 응용 | SELECT 스칼라 | 상품별 리뷰 수 (서브쿼리) |
| 9 | 응용 | IN + NOT IN | 위시리스트 O, 주문 X 상품 |
| 10 | 응용 | 중첩 서브쿼리 | 평균 주문수 이상 고객 |
| 11 | 실전 | FROM + JOIN | 파생 테이블과 외부 JOIN |
| 12 | 실전 | 상관 + 집계 | 고객별 최대 주문금액 |
| 13 | 실전 | 다중 서브쿼리 | 최고가 + 최저가 상품 동시 |
| 14 | 실전 | FROM 중첩 | 월별 매출 → 최대 매출 월 |
| 15 | 실전 | 서브쿼리 vs JOIN | 같은 결과를 서브쿼리/JOIN 두 방식으로 |
| 16 | 실전 | 상관 서브쿼리 | 직전 주문 금액 대비 증감 |
| 17 | 실전 | IN + 다중 조건 | 특정 카테고리 상품을 산 고객 |
| 18 | 실전 | FROM + GROUP | 등급별 평균 주문금액 비교 |
| 19 | 실전 | 종합 | 리뷰 5개 이상, 평점 4 이상 상품 |
| 20 | 실전 | 종합 | 최근 주문 고객 5명의 상세 정보 |
세트 5: 집합 연산 (15문제) — 신규
사용 테이블: orders, reviews, complaints, wishlists, customers, payments
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | UNION | VIP + GOLD 고객 합치기 |
| 2 | 기초 | UNION ALL | 2023년 + 2024년 주문 합치기 |
| 3 | 기초 | UNION ALL | 리뷰 + 불만 → 활동 로그 |
| 4 | 응용 | UNION ALL + 합계행 | 결제방법별 건수 + 합계 |
| 5 | 응용 | UNION ALL + 합계행 | 등급별 인원 + 전체 |
| 6 | 응용 | INTERSECT | 리뷰 AND 불만 접수 고객 |
| 7 | 응용 | INTERSECT | 2023년 AND 2024년 모두 주문한 고객 |
| 8 | 응용 | EXCEPT | 리뷰 O, 불만 X 고객 |
| 9 | 응용 | EXCEPT | 위시리스트 O, 주문 X 고객 |
| 10 | 실전 | UNION ALL + 서브쿼리 | 고객별 활동(주문+리뷰+불만) 합산 |
| 11 | 실전 | UNION ALL + 비율 | 상태별 건수 + 비율 + 합계행 |
| 12 | 실전 | INTERSECT + COUNT | 교집합 크기 |
| 13 | 실전 | EXCEPT + JOIN | 차집합 결과에 고객 정보 JOIN |
| 14 | 실전 | 3집합 비교 | 리뷰/불만/위시 각각의 고객 수 + 교집합 |
| 15 | 실전 | 종합 | 공급업체별 최고가/최저가 UNION ALL |
세트 6: DML 실습 (20문제)
사용 테이블: 연습용 임시 테이블 (문제 내에서 CREATE → 작업 → DROP)
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | INSERT 단일 | 고객 1명 삽입 |
| 2 | 기초 | INSERT 다중 | 상품 3개 동시 삽입 |
| 3 | 기초 | UPDATE + WHERE | 특정 고객 전화번호 변경 |
| 4 | 기초 | DELETE + WHERE | 특정 조건 행 삭제 |
| 5 | 기초 | SELECT 후 UPDATE | 먼저 확인, 그 다음 갱신 |
| 6 | 응용 | UPDATE 다중 칼럼 | 등급 + 포인트 동시 변경 |
| 7 | 응용 | UPDATE 계산 | 가격 8% 인상 |
| 8 | 응용 | DELETE + COUNT | 삭제 전 건수 확인 |
| 9 | 응용 | UPSERT (SQLite) | ON CONFLICT DO UPDATE |
| 10 | 응용 | UPSERT 조건부 | 가격이 기존보다 높을 때만 |
| 11 | 응용 | INSERT...SELECT | 기존 데이터 기반 삽입 |
| 12 | 실전 | WHERE 없는 UPDATE 위험 | 설명 + 안전한 쿼리 |
| 13 | 실전 | 조건부 UPDATE | 비활성+단종 상품 재고 0 |
| 14 | 실전 | 서브쿼리 UPDATE | 주문 없는 상품 비활성화 |
| 15 | 실전 | INSERT...SELECT 변환 | 리퍼비시 상품 생성 |
| 16 | 실전 | DELETE + 날짜 | 오래된 데이터 삭제 |
| 17 | 실전 | UPSERT 실전 | 외부 재고 동기화 |
| 18 | 실전 | 다단계 DML | SELECT→확인→UPDATE→검증 |
| 19 | 실전 | 종합 | 등급 일괄 갱신 (CASE + UPDATE) |
| 20 | 실전 | 종합 | 임시 테이블 생성→데이터 삽입→가공→삭제 |
세트 7: DDL/제약조건 (15문제)
사용 테이블: 연습용 임시 테이블
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | CREATE TABLE | 기본 테이블 생성 |
| 2 | 기초 | PK + NOT NULL | 제약조건 포함 생성 |
| 3 | 기초 | ALTER ADD COLUMN | 칼럼 추가 |
| 4 | 기초 | ALTER RENAME | 칼럼 이름 변경 |
| 5 | 기초 | DROP TABLE IF EXISTS | 안전한 삭제 |
| 6 | 응용 | FOREIGN KEY | 외래 키 참조 |
| 7 | 응용 | CHECK 제약 | 값 범위 제한 |
| 8 | 응용 | UNIQUE 제약 | 이메일 중복 방지 |
| 9 | 응용 | ON DELETE CASCADE | 부모 삭제 시 동작 |
| 10 | 응용 | 복합 PK | 두 칼럼 조합 기본 키 |
| 11 | 실전 | CTAS | 쿼리 결과로 테이블 생성 |
| 12 | 실전 | DELETE vs TRUNCATE | 차이 설명 + 실행 |
| 13 | 실전 | DDL 오류 수정 | 잘못된 DDL 찾고 고치기 |
| 14 | 실전 | SEQUENCE (PG) | 시퀀스 생성 + 사용 |
| 15 | 실전 | 종합 | 가격 이력 테이블 설계 (PK+FK+CHECK) |
세트 8: 트랜잭션 (15문제)
사용 테이블: 연습용 임시 테이블
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | BEGIN + COMMIT | 기본 트랜잭션 |
| 2 | 기초 | BEGIN + ROLLBACK | 롤백으로 취소 |
| 3 | 기초 | SAVEPOINT | 부분 롤백 |
| 4 | 응용 | 원자성 테스트 | 두 UPDATE 중 하나 실패 시 |
| 5 | 응용 | 트랜잭션 + INSERT | 주문 + 재고 차감 묶기 |
| 6 | 응용 | ROLLBACK TO | SAVEPOINT로 되돌리기 |
| 7 | 실전 | 포인트 이동 | A→B 포인트 전송 (원자성) |
| 8 | 실전 | 주문 처리 | 주문생성+결제+재고 3단계 |
| 9 | 실전 | 오류 시나리오 | 중간 실패 후 정합성 확인 |
| 10 | 실전 | PRAGMA 확인 | journal_mode, foreign_keys |
| 11 | 실전 | 동시 수정 시나리오 | 두 사용자가 같은 재고 수정 |
| 12 | 실전 | 배치 처리 | 1000건 UPDATE를 트랜잭션으로 |
| 13 | 실전 | 종합 | 주문 취소 플로우 (상태+재고+포인트) |
| 14 | 실전 | 종합 | 등급 일괄 갱신 트랜잭션 |
| 15 | 실전 | 종합 | 데이터 마이그레이션 트랜잭션 |
세트 9: SQL 디버깅 — 중급 (25문제)
사용 테이블: 전체
| # | 난이도 | 오류 유형 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | JOIN 조건 누락 | CROSS JOIN 발생 |
| 2 | 기초 | JOIN 방향 오류 | LEFT/INNER 혼동 |
| 3 | 기초 | 집계 + 비집계 혼합 | GROUP BY 빠짐 |
| 4 | 기초 | NULL JOIN 누락 | NULL끼리 JOIN 불가 |
| 5 | 응용 | 카디널리티 폭발 | M:N JOIN으로 건수 뻥튀기 |
| 6 | 응용 | HAVING vs WHERE | 집계 전/후 필터 혼동 |
| 7 | 응용 | 서브쿼리 상관 오류 | 외부 참조 칼럼 잘못 지정 |
| 8 | 응용 | 날짜 비교 오류 | '2024-12-31' vs '2024-12-31 23:59:59' |
| 9 | 응용 | UNION 칼럼 불일치 | 칼럼 수/타입 다름 |
| 10 | 응용 | 별칭 스코프 | WHERE에서 SELECT 별칭 사용 |
| 11 | 실전 | N+1 쿼리 | 반복 서브쿼리 → JOIN 변환 |
| 12 | 실전 | DISTINCT 남용 | JOIN 수정이 답 |
| 13 | 실전 | 정수 나눗셈 | 비율 0% 오류 |
| 14 | 실전 | GROUP BY 오류 | 집계 레벨 불일치 |
| 15 | 실전 | INSERT 칼럼 불일치 | VALUES 수 != 칼럼 수 |
| 16 | 실전 | UPDATE WHERE 누락 | 전체 행 갱신 위험 |
| 17 | 실전 | DELETE FK 제약 | 자식 행 있는 부모 삭제 |
| 18 | 실전 | 트랜잭션 누락 | 다중 DML 원자성 미보장 |
| 19 | 실전 | CASE ELSE 누락 | 예상외 NULL |
| 20 | 실전 | COALESCE 타입 | 숫자+문자열 혼합 |
| 21 | 실전 | LEFT JOIN + WHERE | NULL 필터 후 INNER처럼 동작 |
| 22 | 실전 | ORDER BY + UNION | 위치 오류 |
| 23 | 실전 | GROUP_CONCAT 순서 | 정렬 미지정 |
| 24 | 실전 | 날짜 함수 DB 차이 | SQLite vs MySQL vs PG |
| 25 | 실전 | 종합 | 복잡한 쿼리 3개 오류 찾기+수정 |
세트 10: 데이터 품질 점검 (20문제)
사용 테이블: 전체
| # | 난이도 | 검증 유형 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | NULL 비율 | 각 테이블의 NULL 칼럼 비율 |
| 2 | 기초 | 중복 검사 | 이메일 중복 고객 |
| 3 | 기초 | 범위 검증 | 가격 0 이하 상품 |
| 4 | 기초 | FK 정합성 | 존재하지 않는 customer_id 참조 |
| 5 | 응용 | 날짜 논리 | 배송일 < 주문일 역전 |
| 6 | 응용 | 날짜 논리 | 가입일 > 마지막 로그인 역전 |
| 7 | 응용 | 상태 정합성 | 취소인데 배송완료 |
| 8 | 응용 | 금액 정합성 | order_items 합계 ≠ orders.total |
| 9 | 응용 | 고아 레코드 | 삭제된 상품의 리뷰 |
| 10 | 응용 | 중복 주문 | 같은 고객, 같은 날, 같은 금액 |
| 11 | 실전 | 이상치 | 가격이 평균의 5배 이상 |
| 12 | 실전 | 이상치 | 주문 금액 0원 |
| 13 | 실전 | 패턴 검증 | 전화번호 형식 (020-XXXX-XXXX) |
| 14 | 실전 | 패턴 검증 | 이메일 형식 (@testmail.kr) |
| 15 | 실전 | 재고 정합성 | stock_qty < 0 |
| 16 | 실전 | 포인트 정합성 | point_balance < 0 |
| 17 | 실전 | 리뷰 중복 | 같은 고객이 같은 상품에 다중 리뷰 |
| 18 | 실전 | 결제 정합성 | 결제 금액 ≠ 주문 금액 |
| 19 | 실전 | 종합 | 전체 테이블 건강 점검 리포트 |
| 20 | 실전 | 종합 | 데이터 수정이 필요한 항목 리스트 |
고급 (200문제, 11세트)
세트 1: 매출 분석 (20문제)
사용 테이블: orders, order_items, products, categories, customers, calendar
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | CTE + 월별 매출 | WITH로 월별 매출 정리 |
| 2 | 기초 | CTE + JOIN | 카테고리별 매출 순위 |
| 3 | 기초 | 윈도우 SUM | 누적 매출 계산 |
| 4 | 기초 | LAG | 전월 대비 매출 증감 |
| 5 | 응용 | LAG + ROUND | 전월 대비 성장률(%) |
| 6 | 응용 | RANK | 매출 순위 (카테고리별) |
| 7 | 응용 | 이동 평균 | 3개월 이동 평균 매출 |
| 8 | 응용 | CTE 체이닝 | 월별 매출 → 성장률 → 순위 |
| 9 | 응용 | NTILE | 매출 4분위 분류 |
| 10 | 응용 | calendar JOIN | 공휴일 매출 vs 평일 매출 |
| 11 | 실전 | 시계열 | 일별 매출 + 7일 이동평균 + 전년 동기 |
| 12 | 실전 | ABC 분석 | 상품별 매출 누적 비율 → A/B/C 분류 |
| 13 | 실전 | 바스켓 분석 | 함께 구매되는 상품 쌍 |
| 14 | 실전 | 평일 vs 주말 | 요일별 매출 패턴 |
| 15 | 실전 | 결제방법별 | 결제 수단별 월간 매출 추이 |
| 16 | 실전 | 프로모션 효과 | 프로모션 기간 vs 일반 기간 매출 비교 |
| 17 | 실전 | 신규 vs 재구매 | 첫 주문 vs 재주문 매출 비율 |
| 18 | 실전 | 가격대별 | 가격 구간별 판매량 히트맵 |
| 19 | 실전 | 종합 | 월간 경영 리포트 (매출+성장률+TOP5 상품) |
| 20 | 실전 | 종합 | 분기별 카테고리 매출 점유율 변화 |
세트 2: 고객 세분화 (20문제)
사용 테이블: customers, orders, order_items, reviews, complaints, point_transactions, customer_grade_history
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | CTE + 집계 | 고객별 주문 횟수, 총 매출 |
| 2 | 기초 | NTILE | 고객 매출 4분위 |
| 3 | 기초 | CASE + 집계 | RFM 점수 부여 |
| 4 | 응용 | RFM 완성 | Recency+Frequency+Monetary 조합 |
| 5 | 응용 | 코호트 기초 | 가입 월별 고객 수 |
| 6 | 응용 | 코호트 리텐션 | 가입 후 1/3/6/12개월 재주문율 |
| 7 | 응용 | 등급 이동 | 등급 변경 이력 분석 |
| 8 | 응용 | 이탈 감지 | 최근 6개월 주문 없는 활성 고객 |
| 9 | 실전 | LTV 추정 | 고객별 생애 가치 (총 매출 / 가입 기간) |
| 10 | 실전 | 가입 채널별 | acquisition_channel별 LTV 비교 |
| 11 | 실전 | 리뷰어 분석 | 리뷰 작성자의 구매 패턴 |
| 12 | 실전 | 불만 고객 | 불만 접수 고객의 이탈률 |
| 13 | 실전 | 포인트 분석 | 포인트 적립/사용 패턴 |
| 14 | 실전 | 등급별 행동 | 등급별 평균 주문주기, 평균 금액 |
| 15 | 실전 | 재구매 주기 | 고객별 평균 주문 간격 |
| 16 | 실전 | 크로스셀 | VIP 고객이 많이 사는 카테고리 |
| 17 | 실전 | 장바구니 이탈 | 장바구니 → 주문 전환율 |
| 18 | 실전 | 상품 조회 | 조회 대비 구매 전환율 |
| 19 | 실전 | 종합 | 고객 세그먼트 대시보드 |
| 20 | 실전 | 종합 | 이탈 위험 고객 Top 50 |
세트 3: 재고 관리 (15문제)
사용 테이블: products, inventory_transactions, order_items, orders, suppliers
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | 재고 현황 | 카테고리별 총 재고 |
| 2 | 기초 | 재고 부족 | stock_qty < 10 상품 |
| 3 | 응용 | 입출고 집계 | 상품별 입고/출고 수량 |
| 4 | 응용 | 재고 회전율 | 판매량 / 평균재고 |
| 5 | 응용 | ABC 분류 | 매출 기준 A/B/C 상품 분류 |
| 6 | 응용 | 안전 재고 | 일평균 판매량 × 7일 vs 현재 재고 |
| 7 | 실전 | 재고 추이 | 월별 입고/출고/잔고 추이 |
| 8 | 실전 | 데드 스톡 | 6개월 이상 판매 없는 재고 |
| 9 | 실전 | 공급업체별 | 공급업체별 납품 주기 분석 |
| 10 | 실전 | 단종 상품 | 단종이지만 재고 남은 상품 |
| 11 | 실전 | 재주문점 | 재주문 필요 상품 알림 |
| 12 | 실전 | 시즌 패턴 | 월별 판매 패턴으로 수요 예측 |
| 13 | 실전 | 재고 가치 | 재고금액 = stock_qty × cost_price |
| 14 | 실전 | 종합 | 재고 건강 점검 리포트 |
| 15 | 실전 | 종합 | 발주 추천 리스트 |
세트 4: CS 성과 분석 (15문제)
사용 테이블: complaints, returns, orders, customers, staff
| # | 난이도 | 개념 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | 불만 현황 | 카테고리별 불만 건수 |
| 2 | 기초 | 반품 현황 | 반품 사유별 건수 |
| 3 | 응용 | 처리 시간 | 평균 불만 해결 시간 |
| 4 | 응용 | 에스컬레이션 | 에스컬레이션 비율 |
| 5 | 응용 | 직원별 성과 | 직원별 처리 건수, 평균 시간 |
| 6 | 응용 | 반품률 | 카테고리별 반품률 |
| 7 | 실전 | 반복 불만 | 같은 고객의 반복 불만 |
| 8 | 실전 | 상품 품질 | 반품+불만 많은 상품 |
| 9 | 실전 | 채널별 분석 | 불만 접수 채널별 해결률 |
| 10 | 실전 | 보상 분석 | 보상 유형/금액 분석 |
| 11 | 실전 | 월별 추이 | CS 지표 월별 추이 |
| 12 | 실전 | 우선순위 | 우선순위별 SLA 준수율 |
| 13 | 실전 | 종합 | CS 팀 주간 리포트 |
| 14 | 실전 | 종합 | 반품 원인 분석 + 개선 제안 |
| 15 | 실전 | 종합 | VIP 고객 불만 우선 처리 리스트 |
세트 5: 실무 SQL 패턴 (15문제)
사용 테이블: 전체
| # | 난이도 | 패턴 | 문제 설명 |
|---|---|---|---|
| 1 | 응용 | Top-N per group | 카테고리별 매출 1위 상품 |
| 2 | 응용 | 연속 구간 | 연속 주문일 찾기 |
| 3 | 응용 | 갭 분석 | 주문 없는 날 찾기 |
| 4 | 응용 | 피벗 | 월별×카테고리 매출 매트릭스 |
| 5 | 응용 | 누적 비율 | 파레토(80/20) 분석 |
| 6 | 실전 | 세션 분석 | product_views 30분 세션 |
| 7 | 실전 | 퍼널 분석 | 조회→장바구니→주문 전환율 |
| 8 | 실전 | YoY 비교 | 전년 동월 대비 |
| 9 | 실전 | MoM 비교 | 전월 대비 |
| 10 | 실전 | 이상치 탐지 | Z-score로 이상 주문 |
| 11 | 실전 | 계층 쿼리 | 카테고리 트리 전체 경로 |
| 12 | 실전 | 중복 제거 | 중복 행 중 최신만 남기기 |
| 13 | 실전 | 조건부 집계 | CASE + SUM 피벗 |
| 14 | 실전 | 종합 | 대시보드 쿼리 세트 (5개 KPI) |
| 15 | 실전 | 종합 | 일간 운영 리포트 |
세트 6: 비즈니스 시나리오 (15문제)
사용 테이블: 전체 (역할별 시나리오)
| # | 역할 | 시나리오 | 문제 설명 |
|---|---|---|---|
| 1 | CEO | 경영 현황 | 월간 핵심 KPI 요약 |
| 2 | 마케팅 | 캠페인 효과 | 프로모션 전후 매출 비교 |
| 3 | 마케팅 | 타겟 고객 | 이탈 위험 + 구매력 높은 세그먼트 |
| 4 | MD | 상품 기획 | 카테고리별 수요 트렌드 |
| 5 | MD | 가격 최적화 | 가격대별 판매량 분석 |
| 6 | CS | 불만 처리 | 긴급 대응 필요 고객 리스트 |
| 7 | CS | SLA 준수 | 처리 시간 SLA 위반 건 |
| 8 | 물류 | 배송 효율 | 택배사별 배송 성과 |
| 9 | 물류 | 발주 계획 | 입고 필요 상품 리스트 |
| 10 | 재무 | 매출 보고 | 분기별 매출/이익 리포트 |
| 11 | 재무 | 쿠폰 비용 | 쿠폰 할인 총액 vs 매출 증가 |
| 12 | 분석 | A/B 테스트 | 고객 그룹별 구매 패턴 비교 |
| 13 | DBA | 테이블 통계 | 전체 DB 사이즈, 행 수 리포트 |
| 14 | 개발 | API 데이터 | 상품 목록 API 응답 생성 |
| 15 | 종합 | 경영회의 | 월간 경영회의 자료 (5개 리포트) |
세트 7: 쿼리 최적화 (15문제)
사용 테이블: 전체
| # | 난이도 | 주제 | 문제 설명 |
|---|---|---|---|
| 1 | 기초 | EXPLAIN | 기본 실행 계획 읽기 |
| 2 | 기초 | 인덱스 확인 | 사용 중인 인덱스 목록 |
| 3 | 응용 | 인덱스 생성 | 느린 쿼리에 인덱스 추가 |
| 4 | 응용 | 커버링 인덱스 | Index-Only Scan 만들기 |
| 5 | 응용 | 부분 인덱스 | 활성 데이터만 인덱싱 |
| 6 | 응용 | SELECT * 제거 | 필요 칼럼만 선택 |
| 7 | 실전 | 서브쿼리→JOIN | 서브쿼리를 JOIN으로 변환 |
| 8 | 실전 | N+1 제거 | 반복 쿼리를 단일 JOIN으로 |
| 9 | 실전 | LIKE 최적화 | 접두어 검색으로 변환 |
| 10 | 실전 | 날짜 범위 | 함수 호출 제거 (SARGable) |
| 11 | 실전 | UNION vs OR | 성능 비교 |
| 12 | 실전 | EXISTS vs IN | 대용량 비교 |
| 13 | 실전 | 쿼리 리라이트 | 느린 쿼리 3개 최적화 |
| 14 | 실전 | 종합 | 실행 계획 분석 + 인덱스 설계 |
| 15 | 실전 | 종합 | 5개 쿼리 전후 성능 비교 |
세트 8: 면접 대비 (20문제)
사용 테이블: 전체
| # | 주제 | 문제 설명 |
|---|---|---|
| 1 | Top-N | 카테고리별 매출 Top 3 |
| 2 | 중복 제거 | 중복 행에서 최신만 남기기 |
| 3 | 누적 합계 | 일별 누적 매출 |
| 4 | 연속 일수 | 최장 연속 주문일 |
| 5 | N번째 값 | 두 번째로 비싼 상품 |
| 6 | 피벗 | 행→열 변환 |
| 7 | 계층 탐색 | 카테고리 전체 경로 |
| 8 | 갭 찾기 | 빈 ID 찾기 |
| 9 | 자기 참조 | 매니저-직원 계층 |
| 10 | 비율 계산 | 전체 대비 비율 |
| 11 | 중앙값 | 주문 금액 중앙값 |
| 12 | 이동 평균 | 7일 이동 평균 |
| 13 | RFM | 고객 RFM 세분화 |
| 14 | 퍼널 | 3단계 전환율 |
| 15 | 코호트 | 가입 코호트 리텐션 |
| 16 | A/B 비교 | 두 그룹 성과 비교 |
| 17 | UPSERT | 데이터 동기화 |
| 18 | 트랜잭션 | 포인트 전송 설계 |
| 19 | 인덱스 | 쿼리에 적합한 인덱스 설계 |
| 20 | 종합 | 실무 시나리오 3문제 세트 |
세트 9: 고급 분석 (15문제)
사용 테이블: 전체
| # | 주제 | 문제 설명 |
|---|---|---|
| 1 | 세션 분석 | product_views 기반 세션 식별 |
| 2 | 퍼널 상세 | 조회→위시→장바구니→주문 |
| 3 | 등급 이동 | grade_history 마르코프 체인 |
| 4 | 프로모션 ROI | 할인 비용 vs 매출 증가 |
| 5 | 쿠폰 효과 | 쿠폰 사용자 vs 미사용자 비교 |
| 6 | 가격 탄력성 | 가격 변경 전후 판매량 |
| 7 | 시간대 분석 | 시간대×요일 주문 히트맵 |
| 8 | 배송 SLA | 택배사별 SLA 준수율 |
| 9 | Q&A 분석 | 답변율, 평균 답변 시간 |
| 10 | 태그 분석 | 인기 태그, 태그별 매출 |
| 11 | 이미지 분석 | 이미지 수와 판매량 상관관계 |
| 12 | 가격 이력 | 가격 변경 빈도와 매출 영향 |
| 13 | 포인트 경제 | 포인트 발행/소멸/사용 밸런스 |
| 14 | 종합 | BI 대시보드 쿼리 세트 |
| 15 | 종합 | 주간 경영진 리포트 5개 쿼리 |
세트 10: 도전 문제 (20문제)
사용 테이블: 전체
| # | 주제 | 문제 설명 |
|---|---|---|
| 1 | 연속 구간 최장 | 가장 긴 연속 주문일 |
| 2 | 상호 구매 | A를 산 사람이 B도 산 비율 |
| 3 | 그래프 탐색 | 카테고리 최하위→최상위 경로 |
| 4 | 시계열 갭 | 주문 없는 날 전후 패턴 |
| 5 | 복합 순위 | 다중 기준 순위 (매출+리뷰+재구매) |
| 6 | 재귀 BOM | 부품 트리 (카테고리 활용) |
| 7 | 스냅샷 재구성 | point_transactions으로 잔액 재계산 |
| 8 | 이상 거래 | 평소 패턴 대비 이상 주문 |
| 9 | 네트워크 분석 | 같은 상품을 산 고객 그래프 |
| 10 | 시간 윈도우 | 30일 롤링 윈도우 집계 |
| 11 | JSON 분석 | specs JSON으로 상품 스펙 비교 |
| 12 | 멀티 스텝 DML | 등급 재산정 전체 프로세스 |
| 13 | 인덱스 설계 | 5개 쿼리에 최적 인덱스 세트 |
| 14 | 뷰 설계 | 5개 비즈니스 뷰 생성 |
| 15 | 트리거 설계 | 재고 자동 관리 트리거 |
| 16 | SP 설계 | 주문 처리 프로시저 |
| 17 | 데이터 마이그레이션 | 스키마 변경 + 데이터 이동 |
| 18 | 성능 최적화 | 느린 리포트 쿼리 3개 개선 |
| 19 | 전체 리포트 | 월간 경영 리포트 (10개 섹션) |
| 20 | 최종 도전 | 비즈니스 요구사항 → SQL 변환 (5개) |
세트 11: 실행 계획 분석 (10문제)
사용 테이블: 전체
| # | 주제 | 문제 설명 |
|---|---|---|
| 1 | EXPLAIN 기초 | 실행 계획 읽기 |
| 2 | SCAN vs SEARCH | 차이 설명 |
| 3 | 인덱스 선택 | 어떤 인덱스가 사용되는지 |
| 4 | 복합 인덱스 순서 | 칼럼 순서 영향 |
| 5 | 커버링 인덱스 | Index-Only Scan 확인 |
| 6 | JOIN 순서 | 실행 계획에서 JOIN 순서 분석 |
| 7 | 정렬 비용 | ORDER BY의 실행 계획 영향 |
| 8 | 서브쿼리 vs JOIN | 실행 계획 비교 |
| 9 | 최적화 전후 | 인덱스 추가 전/후 비교 |
| 10 | 종합 | 복잡한 쿼리 실행 계획 전체 분석 |
총계
| 분류 | 세트 수 | 문제 수 |
|---|---|---|
| 초급 | 4 | 100 |
| 중급 | 10 | 200 |
| 고급 | 11 | 200 |
| 합계 | 25 | 500 |