24강 전체를 종합하는 복합 쿼리 실전 연습, DBMS별 주요 차이점, SQL 치트시트, 앞으로의 학습 경로를 정리합니다.
🎯 마지막 강 — 지금까지의 여정
이 강에서는 24강에 걸쳐 배운 모든 내용을 실전 쿼리로 종합 연습하고, DBMS별 주요 문법 차이와 앞으로 나아갈 학습 경로를 안내합니다. SQL은 배운 순간보다 꾸준히 써보는 과정에서 실력이 쌓입니다. 이 강을 마무리하면서 "SQLite를 벗어나 실무 데이터베이스를 다루는 다음 단계"로 나아갈 준비를 마칩니다.
🏋️ 종합 실전 쿼리 연습
이 섹션에서는 여러 강의 기술을 조합한 복합 요구사항 쿼리를 작성하며 실력을 점검합니다.
지금까지 배운 모든 기술을 하나씩 꺼내 사용하는 복합 쿼리를 작성해봅니다. 실습 DB(members, books, orders)를 기반으로 실제 비즈니스 보고서를 만드는 수준의 쿼리입니다.
실전 과제 1: 우수 고객 분석 보고서
"완료된 주문 기준으로, 총 구매 금액이 30,000원 이상인 VIP·PREMIUM 회원의 이름, 등급, 주문 건수, 총 구매 금액, 가장 최근 주문일을 구하세요. 총 구매 금액 내림차순으로 정렬하세요."
SELECT
m.name AS 회원이름,
m.grade AS 등급,
COUNT(o.order_id) AS 주문건수,
SUM(b.price * o.quantity) AS 총구매금액,
MAX(o.order_date) AS 최근주문일
FROM members AS m
INNER JOIN orders AS o ON m.member_id = o.member_id
INNER JOIN books AS b ON o.book_id = b.book_id
WHERE o.status = 'DONE'
AND m.grade IN ('VIP', 'PREMIUM')
GROUP BY m.member_id, m.name, m.grade
HAVING SUM(b.price * o.quantity) >= 30000
ORDER BY 총구매금액 DESC;
이 쿼리 하나에 INNER JOIN(3테이블), WHERE, GROUP BY, HAVING, ORDER BY가 모두 사용되었습니다.
실전 과제 2: 카테고리 판매 현황 + 등급별 피벗
"카테고리별로 VIP·PREMIUM·REGULAR 회원의 구매 건수를 가로로 집계하세요."
SELECT
b.category AS 카테고리,
COUNT(CASE WHEN m.grade = 'VIP' THEN 1 END) AS VIP구매,
COUNT(CASE WHEN m.grade = 'PREMIUM' THEN 1 END) AS PREMIUM구매,
COUNT(CASE WHEN m.grade = 'REGULAR' THEN 1 END) AS REGULAR구매,
COUNT(o.order_id) AS 총구매수
FROM books AS b
LEFT JOIN orders AS o ON b.book_id = o.book_id AND o.status != 'CANCEL'
LEFT JOIN members AS m ON o.member_id = m.member_id
GROUP BY b.category
ORDER BY 총구매수 DESC;
LEFT JOIN, CASE 조건부 집계, GROUP BY가 결합된 피벗 보고서입니다.
실전 과제 3: 인라인 뷰 활용 순위 계산
"도서별 총 판매금액을 구하고, 전체 평균 판매금액보다 높은 도서만 표시하세요."
SELECT 도서제목, 카테고리, 총판매금액
FROM (
SELECT
b.title AS 도서제목,
b.category AS 카테고리,
SUM(b.price * o.quantity) AS 총판매금액
FROM books AS b
INNER JOIN orders AS o ON b.book_id = o.book_id
WHERE o.status = 'DONE'
GROUP BY b.book_id, b.title, b.category
) AS 판매통계
WHERE 총판매금액 > (
SELECT AVG(판매합계)
FROM (
SELECT SUM(b2.price * o2.quantity) AS 판매합계
FROM books AS b2
INNER JOIN orders AS o2 ON b2.book_id = o2.book_id
WHERE o2.status = 'DONE'
GROUP BY b2.book_id
)
)
ORDER BY 총판매금액 DESC;
인라인 뷰(FROM 서브쿼리) + 스칼라 서브쿼리가 중첩된 복합 쿼리입니다. 처음 보면 복잡해 보이지만, 안쪽부터 차례로 읽으면 이해할 수 있습니다.
🌐 DBMS별 주요 문법 차이
이 섹션에서는 SQLite에서 다른 DBMS로 넘어갈 때 알아야 할 핵심 차이점을 살펴보겠습니다.
이 강좌는 SQLite를 기반으로 진행했지만, 실무에서는 MySQL, PostgreSQL, SQL Server, Oracle 등 다양한 DBMS가 사용됩니다. 핵심 SQL 문법은 대부분 호환되지만 주요 차이점을 알아두어야 합니다.
| 기능 | SQLite | MySQL | PostgreSQL |
|---|---|---|---|
| 문자열 연결 | || | CONCAT() 함수 | || 또는 CONCAT() |
| 대소문자 무관 LIKE | ASCII만 무관 | 기본 대소문자 무관 | ILIKE |
| 외래키 기본 활성 | 비활성 (PRAGMA 필요) | 활성 | 활성 |
| FULL OUTER JOIN | 미지원 (UNION으로 대체) | 미지원 (UNION으로) | 지원 |
| 날짜 함수 | date(), strftime() | DATE(), DATE_FORMAT() | TO_CHAR(), DATE_TRUNC() |
| 자동 증가 | INTEGER PRIMARY KEY | AUTO_INCREMENT | SERIAL, GENERATED |
| LIMIT·OFFSET | LIMIT N OFFSET M | LIMIT M, N (순서 반대) | LIMIT N OFFSET M |
이런 차이가 있지만, 기본 SELECT, WHERE, JOIN, GROUP BY, HAVING, ORDER BY는 거의 모든 DBMS에서 동일하게 동작합니다. SQLite에서 쿼리 작성법을 익힌 후 다른 DBMS로 넘어가면 대부분 큰 어려움 없이 적응할 수 있습니다.
📋 SQL 치트시트 — 자주 쓰는 패턴
이 섹션에서는 실무에서 가장 자주 사용하는 SQL 패턴을 정리합니다.
-- ① 기본 조회 템플릿
SELECT 열1, 열2, 집계함수(열3) AS 별칭
FROM 테이블 AS t
[INNER/LEFT] JOIN 다른테이블 AS t2 ON t.fk = t2.pk
WHERE 조건
GROUP BY 그룹화열
HAVING 집계조건
ORDER BY 정렬열 DESC
LIMIT N OFFSET M;
-- ② 상위 N개 조회
SELECT * FROM 테이블 ORDER BY 열 DESC LIMIT 5;
-- ③ 중복 없는 목록
SELECT DISTINCT 열 FROM 테이블 ORDER BY 열;
-- ④ A에 있고 B에 없는 데이터
SELECT a.* FROM A AS a
LEFT JOIN B AS b ON a.id = b.a_id
WHERE b.a_id IS NULL;
-- ⑤ 집계 + 조건 필터
SELECT 그룹열, COUNT(*), AVG(수치열)
FROM 테이블
GROUP BY 그룹열
HAVING COUNT(*) >= 최소건수;
-- ⑥ 조건부 집계 (피벗)
SELECT
COUNT(CASE WHEN 조건1 THEN 1 END) AS 조건1수,
COUNT(CASE WHEN 조건2 THEN 1 END) AS 조건2수
FROM 테이블;
-- ⑦ 서브쿼리 — 전체 평균 초과 행
SELECT * FROM 테이블
WHERE 수치열 > (SELECT AVG(수치열) FROM 테이블);
-- ⑧ 안전한 UPDATE 패턴
-- 1. SELECT로 먼저 확인
SELECT * FROM 테이블 WHERE 조건;
-- 2. UPDATE 실행
UPDATE 테이블 SET 열 = 새값 WHERE 조건;
🚀 앞으로의 학습 경로
이 섹션에서는 이 강좌를 마친 후 SQL 실력을 계속 키워가는 방법을 안내합니다.
이 강좌를 완료했다면 SQL의 핵심 기초를 갖춘 것입니다. 다음 단계로 나아갈 경로를 단계별로 안내합니다.
1단계: 실무 DBMS 선택해서 전환하기
개인 프로젝트나 취업 목표에 따라 MySQL(웹 개발, 스타트업), PostgreSQL(오픈소스 생태계, 데이터 분석, 클라우드), SQL Server(대기업, .NET 환경) 중 하나를 선택해서 실제 환경을 구축합니다. DBeaver(무료 GUI 도구)나 TablePlus를 설치해 실제 DB를 연결해 다루어보세요.
2단계: 실습 데이터로 연습하기
Kaggle에는 수천 개의 무료 데이터셋이 있습니다. 관심 있는 분야(영화, 스포츠, 경제, 의료 등)의 데이터를 다운로드해 실제 데이터로 쿼리를 작성해보세요. SQL을 배우는 가장 빠른 방법은 실제 데이터로 질문을 만들고 답을 찾는 것입니다.
3단계: 심화 SQL 기능 배우기
이 강좌에서 다루지 않은 고급 기능들이 있습니다. 윈도우 함수(Window Function)는 행마다 집계를 유지하면서 순위, 누적 합계 등을 계산합니다(ROW_NUMBER, RANK, LAG, LEAD, SUM OVER). CTE(공통 테이블 표현식, WITH 절)는 복잡한 쿼리를 단계별로 이름을 붙여 가독성을 높입니다. 뷰(View)는 자주 쓰는 쿼리를 저장해 테이블처럼 사용합니다. 트랜잭션 심화와 ACID 속성도 실무에서 중요합니다.
-- 윈도우 함수 맛보기 (MySQL 8.0+, PostgreSQL)
SELECT
name,
grade,
join_date,
ROW_NUMBER() OVER (PARTITION BY grade ORDER BY join_date) AS 등급내가입순서
FROM members;
4단계: 실무 프로젝트에 SQL 적용하기
Python + SQLite(sqlite3 모듈), Python + PostgreSQL(psycopg2, SQLAlchemy), Node.js + MySQL, Django/Flask ORM, 엑셀 파워 쿼리 등 다양한 환경에서 SQL을 활용해보세요. SQL을 알면 어떤 도구와도 결합할 수 있습니다.
🎓 강좌 마무리 — 배운 것 총정리
이 섹션에서는 24강 전체 커리큘럼을 한눈에 정리합니다.
| 단원 | 강 | 핵심 내용 |
|---|---|---|
| 기초 | 1~2강 | DB 개념, SQLite 실습 환경 |
| 3~4강 | 테이블 조회, SELECT 표현식 | |
| 5~6강 | WHERE 조건, LIKE, NULL | |
| 조회 심화 | 7~8강 | ORDER BY·LIMIT, DISTINCT·계산함수 |
| 9~11강 | 집계함수, GROUP BY, HAVING | |
| 12~15강 | 조인 개념, INNER/OUTER/다중 조인 | |
| 고급 조회 | 16~17강 | 서브쿼리, 집합 연산 |
| 18강 | CASE WHEN 조건 표현 | |
| 설계·관리 | 19강 | INSERT·UPDATE·DELETE (DML) |
| 20~21강 | CREATE TABLE, 제약 조건 (DDL) | |
| 22~24강 | 인덱스, 데이터 모델링, 실전 |
24강의 여정을 함께 마쳤습니다. 데이터베이스의 개념을 처음 배우고, SQL 한 줄을 처음 써보고, 이제 여러 테이블을 조인하고 집계하고 서브쿼리까지 활용할 수 있게 되었습니다. SQL은 데이터를 다루는 모든 직업에서 핵심 도구입니다. 앞으로 실제 데이터를 만날 때마다 이 강좌에서 배운 패턴들이 자연스럽게 손에 익기를 바랍니다. 계속 쿼리를 작성하고, 실수하고, 고쳐나가세요. 그것이 SQL 실력을 키우는 유일한 방법입니다.
관련 주제
- 복합 쿼리 실습
- 우수 고객 분석 쿼리
- DBMS별 문법 차이
- SQL 치트시트
- 실전 비즈니스 보고서
- 개발·프로그래밍
- 개발·프로그래밍 강의
- SQL·데이터베이스 입문 24강
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
SQL·데이터베이스 입문 24강
이 강의가 속한 시리즈는 총 24강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
