https://product.kyobobook.co.kr/detail/S000220221456
LUVIT EPL과 유튜브 데이터로 배우는 DuckDB | 이기준 - 교보문고
LUVIT EPL과 유튜브 데이터로 배우는 DuckDB | 복잡한 데이터 분석 흐름을 더 단순하게 만드는 DuckDB 최근 주목받고 있는 DuckDB를 활용해 SQL 기반 데이터 분석과 실전 프로젝트를 학습할 수 있도록 구
product.kyobobook.co.kr
소개
취업 준비, 인턴십, 또는 첫 데이터 분석가 직무를 준비하고 있다면 거의 모든 채용 공고에서 반복적으로 등장하는 기술이 하나 있습니다.
바로 SQL입니다.
도구, 프로그래밍 언어, AI 기술은 계속해서 발전하고 있지만, SQL은 2026년에도 여전히 데이터 분석의 핵심 기반으로 자리 잡고 있습니다.
기업들은 매일 엄청난 양의 데이터를 생성합니다. 분석가가 대시보드를 만들고, 보고서를 작성하고, 예측 모델을 개발하기 전에 반드시 데이터를 효율적으로 조회하고 가공해야 합니다. 바로 이 지점에서 SQL이 중요한 역할을 합니다.
많은 학생들이 SQL을 제대로 익히기 전에 머신러닝(Machine Learning), 딥러닝(Deep Learning), 생성형 AI(Generative AI)로 곧바로 넘어가려고 합니다. 그러나 대부분의 초급 데이터 분석가 직무는 데이터베이스를 조회하고, 보고서를 생성하며, SQL을 사용해 비즈니스 질문에 답하는 업무가 중심입니다.
이 로드맵에서는 SQL을 초보자 수준부터 실무 투입이 가능한 수준까지 체계적으로 학습할 수 있는 경로를 소개합니다.
데이터 분석가에게 SQL이 중요한 이유
여러분이 전자상거래 기업에서 데이터 분석가로 근무한다고 가정해 보겠습니다.
매니저가 다음과 같은 질문을 합니다.
이번 달 가장 높은 매출을 기록한 상품은 무엇인가요?
우리의 핵심 고객은 누구인가요?
첫 주문 이후 더 이상 구매하지 않은 사용자는 몇 명인가요?
어떤 마케팅 캠페인이 가장 좋은 성과를 냈나요?
이 질문들에 대한 답은 이미 회사의 데이터베이스 안에 존재합니다.
SQL은 이러한 답을 빠르게 찾아낼 수 있도록 도와줍니다.
다음과 같은 세계적인 기업들도 매일 SQL을 활용하고 있습니다.
Amazon
Netflix
Uber
산업 분야와 관계없이 SQL은 데이터 분석가에게 가장 가치 있는 기술 중 하나로 남아 있습니다.
Phase 1: SQL 기초
비즈니스 문제를 해결하기 전에 먼저 SQL의 기본 개념에 익숙해져야 합니다.
SELECT 문
SELECT 문은 데이터를 조회하는 데 사용됩니다.
SELECT customer_name
FROM customers;
이 쿼리는 테이블에서 고객 이름을 조회합니다.
WHERE 절
레코드를 필터링하는 데 사용됩니다.
SELECT *
FROM customers
WHERE city = 'Mumbai';
Mumbai에 거주하는 고객만 반환됩니다.
ORDER BY
데이터를 정렬합니다.
SELECT *
FROM products
ORDER BY price DESC;
상품이 가격이 높은 순서부터 낮은 순서로 정렬됩니다.
DISTINCT
중복 데이터를 제거합니다.
SELECT DISTINCT city
FROM customers;
고유한 도시 목록만 반환합니다.
LIMIT
반환되는 행의 수를 제한합니다.
SELECT *
FROM orders
LIMIT 10;
10개의 레코드만 반환합니다.
별칭(Alias)
결과를 더 읽기 쉽게 만들어 줍니다.
SELECT SUM(revenue) AS Total_Revenue
FROM sales;
결과 컬럼 이름이 Total_Revenue로 표시됩니다.
실습 목표
Phase 1이 끝날 때쯤에는 다음 내용을 편안하게 수행할 수 있어야 합니다.
- 테이블 조회하기
- 레코드 필터링하기
- 데이터 정렬하기
- 필요한 컬럼만 선택하기
Phase 2: 중급 SQL
이제 데이터를 요약하고 분석할 차례입니다.
COUNT()
레코드 수를 계산합니다.
SELECT COUNT(*)
FROM customers;
SUM()
합계를 계산합니다.
SELECT SUM(sales_amount)
FROM sales;
AVG()
평균값을 계산합니다.
SELECT AVG(order_value)
FROM orders;
MAX()와 MIN()
최댓값과 최솟값을 찾습니다.
SELECT MAX(salary)
FROM employees;
SELECT MIN(price)
FROM products;
GROUP BY
레코드를 그룹으로 묶습니다.
SELECT city,
COUNT(*) AS Customers
FROM customers
GROUP BY city;
출력 결과:
| City | Customers |
| Mumbai | 120 |
| Pune | 80 |
| Delhi | 95 |
HAVING
그룹화된 결과를 필터링합니다.
SELECT city,
COUNT(*) AS Customers
FROM customers
GROUP BY city
HAVING COUNT(*) > 100;
고객 수가 100명 이상인 도시만 반환합니다.
실습 목표
이 단계가 끝날 때쯤에는 다음을 수행할 수 있어야 합니다.
- 매출 계산하기
- 사용자 수 집계하기
- 요약 보고서 생성하기
- 그룹화된 데이터 분석하기
Phase 3: JOIN 완전 정복
JOIN은 면접에서 가장 자주 출제되는 SQL 주제 중 하나입니다.
다음과 같은 두 개의 테이블이 있다고 가정해 보겠습니다.
Customers
| CustomerID | Name |
| 1 | Shreya |
| 2 | Rahul |
Orders
| OrderID | CustomerID |
| 101 | 1 |
| 102 | 2 |
INNER JOIN
일치하는 레코드만 반환합니다.
SELECT c.Name,
o.OrderID
FROM Customers c
INNER JOIN Orders o
ON c.CustomerID = o.CustomerID;
결과:
| Name | OrderID |
| Shreya | 101 |
| Rahul | 102 |
LEFT JOIN
왼쪽 테이블의 모든 레코드를 반환합니다.
SELECT *
FROM Customers c
LEFT JOIN Orders o
ON c.CustomerID = o.CustomerID;
주문 내역이 없는 고객도 결과에 포함됩니다.
RIGHT JOIN
오른쪽 테이블의 모든 레코드를 반환합니다.
두 번째 테이블의 모든 데이터를 확인하고 싶을 때 유용합니다.
FULL JOIN
일치하는 행과 일치하지 않는 행을 모두 반환합니다.
누락된 데이터를 찾을 때 유용합니다.
실무 예제
회사가 한 번도 주문하지 않은 고객을 찾고자 합니다.
SELECT c.*
FROM Customers c
LEFT JOIN Orders o
ON c.CustomerID = o.CustomerID
WHERE o.OrderID IS NULL;
이는 면접에서 매우 자주 등장하는 질문입니다.
Phase 4: 고급 SQL
이 단계부터 초급자와 숙련된 분석가의 차이가 나타나기 시작합니다.
윈도우 함수(Window Functions)
윈도우 함수는 행을 집계하여 줄이지 않고도 계산을 수행할 수 있습니다.
ROW_NUMBER()
고유한 순위를 부여합니다.
SELECT EmployeeName,
Salary,
ROW_NUMBER() OVER(
ORDER BY Salary DESC)
FROM Employees;
RANK()
동일한 값에 대해 같은 순위를 부여합니다.
SELECT EmployeeName,
Salary,
RANK() OVER(
ORDER BY Salary DESC)
FROM Employees;
DENSE_RANK()
RANK와 유사하지만 순위 번호를 건너뛰지 않습니다.
SELECT EmployeeName,
Salary,
DENSE_RANK() OVER(
ORDER BY Salary DESC)
FROM Employees;
공통 테이블 표현식(CTE)
쿼리의 가독성을 높여줍니다.
WITH TopSales AS (
SELECT *
FROM Sales
WHERE Revenue > 10000
)
SELECT *
FROM TopSales;
서브쿼리(Subquery)
쿼리 안에 또 다른 쿼리를 작성하는 방식입니다.
SELECT *
FROM Employees
WHERE Salary >
(
SELECT AVG(Salary)
FROM Employees
);
평균 급여보다 높은 급여를 받는 직원을 찾습니다.
뷰(View)
데이터베이스에 저장되는 가상 테이블입니다.
CREATE VIEW HighRevenueCustomers AS
SELECT *
FROM Customers
WHERE Revenue > 50000;
보고서 작성 시 매우 유용합니다.
실습 목표
이 단계가 끝나면 다음을 수행할 수 있어야 합니다.
- 복잡한 분석용 SQL 작성하기
- SQL 면접 문제 해결하기
- 대용량 데이터 다루기
Phase 5: 실제 비즈니스 문제 해결하기
바로 이 단계에서 SQL의 진정한 가치가 드러납니다.
기업은 단순히 SQL 문법을 작성할 수 있는 사람을 채용하지 않습니다.
기업이 원하는 것은 비즈니스 문제를 해결할 수 있는 분석가입니다.
문제 1: 핵심 고객 찾기
가장 높은 매출을 발생시키는 고객을 찾습니다.
SELECT customer_id,
SUM(revenue) AS TotalRevenue
FROM orders
GROUP BY customer_id
ORDER BY TotalRevenue DESC;
문제 2: 매출 분석
월별 매출을 계산합니다.
SELECT MONTH(order_date),
SUM(revenue)
FROM orders
GROUP BY MONTH(order_date);
문제 3: 이탈 고객 분석
더 이상 구매하지 않는 고객을 식별합니다.
SELECT customer_id
FROM customers
WHERE last_purchase_date <
CURRENT_DATE - INTERVAL '90 days';
문제 4: 상품 성과 분석
가장 많이 판매된 상품을 찾습니다.
SELECT product_name,
SUM(quantity)
FROM sales
GROUP BY product_name
ORDER BY SUM(quantity) DESC;
이러한 분석은 실제 데이터 분석가들이 업무에서 수행하는 대표적인 분석 사례들입니다.
SQL 면접 준비
모든 단계를 완료했다면 이제 면접 문제 풀이를 시작해야 합니다.
LeetCode
SQL 면접 문제를 연습하기에 가장 좋은 플랫폼입니다.
주요 주제:
- JOIN
- 윈도우 함수(Window Functions)
- 집계 함수(Aggregations)
HackerRank
초보자에게 매우 적합한 플랫폼입니다.
주요 주제:
- 기초 SQL
- 중급 SQL
- 데이터베이스 개념
DataLemur
데이터 분석가(Data Analyst) 및 데이터 사이언티스트(Data Scientist) 면접을 위해 특별히 만들어진 플랫폼입니다.
주요 주제:
- 비즈니스 중심 SQL
- 실제 기업 면접 문제
- 고급 분석 시나리오
추천 학습 일정
1주차
SQL 기초
- SELECT
- WHERE
- ORDER BY
- DISTINCT
2주차
집계 함수
- COUNT
- SUM
- AVG
- GROUP BY
3주차
JOIN
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL JOIN
4주차
고급 SQL
- 윈도우 함수(Window Functions)
- CTE
- 서브쿼리(Subqueries)
5주차 이후
면접 대비 실전 연습
- LeetCode
- HackerRank
- DataLemur
매일 최소 5개의 SQL 문제를 풀어보십시오.
초보자가 자주 하는 실수
- 문제 해결 없이 문법만 암기하기
- JOIN 학습을 소홀히 하기
- 윈도우 함수를 건너뛰기
- SQL보다 머신러닝을 먼저 공부하기
- 실제 데이터셋으로 연습하지 않기
SQL을 가장 효과적으로 배우는 방법은 실제 비즈니스 질문을 해결해 보는 것입니다.
마지막 조언
데이터 분석가(Data Analyst), 비즈니스 분석가(Business Analyst), 제품 분석가(Product Analyst), 또는 데이터 사이언티스트(Data Scientist)가 되는 것을 진지하게 고려하고 있다면 SQL을 가장 먼저 우선순위에 두어야 합니다.
Python, Power BI, Tableau, Excel, 머신러닝, 그리고 AI 모두 중요한 기술입니다. 하지만 SQL은 이 모든 기술을 연결하는 기반입니다.
머신러닝을 시작하기 전에 SQL부터 완전히 익히십시오. 대부분의 분석가 직무에서는 매일 SQL을 사용하며, 뛰어난 SQL 실력은 면접 합격과 불합격을 가르는 결정적인 요소가 되기도 합니다.
기초부터 시작하고, 꾸준히 연습하며, 실제 비즈니스 문제를 해결해 보십시오. 그렇게 한다면 2026년의 많은 예비 데이터 분석가들보다 한발 앞서 나갈 수 있을 것입니다.
'EPL과 유튜브 데이터로 배우는 DuckDB' 카테고리의 다른 글
| DuckDB: 소규모 Spark의 종말 (0) | 2026.06.14 |
|---|---|
| DuckDB 쿼리 계획: EXPLAIN을 사용해 디버거처럼 조인 문제 수정 (0) | 2026.06.14 |
| SQL을 쉽게 배우기: 데이터 과학자를 위한 입문 가이드 (0) | 2026.06.14 |
| AI 시대의 DuckDB 확장 전략 (0) | 2026.06.13 |
| Arrow, Pandas, DuckDB로 다루는 연합 데이터 (0) | 2026.06.08 |
댓글