SQL 기초 배우기 (데이터분석 입문 )
SQL이 왜 필수인가?
데이터분석 직무 분석 (2024):
- SQL 능력 요구: 95% (거의 필수)
- 평균 연봉: 3,500~4,500만원
- 입직 난이도: 낮음 (SQL이면 충분)
---
SQL의 3가지 핵심 명령어
1. SELECT (데이터 조회)
기본 문법:
SELECT column1, column2
FROM table_name
WHERE condition;실제 예시:
-- 직원 테이블에서 이름과 급여만 보기
SELECT name, salary
FROM employees
WHERE salary > 3000000;
-- 결과:
-- name | salary
-- 김진수 | 3500000
-- 이순신 | 42000002. JOIN (테이블 연결)
종류:
- INNER JOIN: 교집합만
- LEFT JOIN: 왼쪽 테이블 전부 + 교집합
-- 직원 정보와 부서 정보 연결
SELECT
e.name,
e.salary,
d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.id
WHERE e.salary > 3000000;3. GROUP BY (그룹화 및 집계)
-- 부서별 평균 급여
SELECT
department_name,
AVG(salary) as avg_salary,
COUNT(*) as employee_count
FROM employees
GROUP BY department_name
ORDER BY avg_salary DESC;---
2개월 SQL 마스터 로드맵
1주차: SELECT 기초
학습 내용:
- SELECT 기본 문법
- WHERE (조건 필터링)
- AND, OR, NOT
- BETWEEN, IN, LIKE
-- 연봉이 3000만원 이상 4000만원 이하인 직원
SELECT name, salary
FROM employees
WHERE salary BETWEEN 3000000 AND 4000000;
-- 이름이 '김'으로 시작하는 직원
SELECT name
FROM employees
WHERE name LIKE '김%';목표: 기본 조회 쿼리 20개 작성 가능
2주차: 정렬 & 함수
학습 내용:
- ORDER BY (정렬)
- LIMIT (제한)
- COUNT, SUM, AVG, MAX, MIN
- DATE 함수
-- 연봉 높은 순으로 상위 5명
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 5;
-- 2024년 입사자의 수
SELECT COUNT(*)
FROM employees
WHERE YEAR(hire_date) = 2024;3주차: JOIN 마스터
학습 내용:
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN (이해만)
- 다중 JOIN
-- 부서 정보와 함께 직원 조회
SELECT
e.name,
e.salary,
d.department_name,
m.manager_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.id
LEFT JOIN managers m ON d.manager_id = m.id;4주차: GROUP BY & 집계
학습 내용:
- GROUP BY 기본
- HAVING (그룹 필터링)
- COUNT, SUM, AVG
- 다중 그룹화
-- 부서별 직원 수와 평균 연봉
SELECT
department_name,
COUNT(*) as emp_count,
AVG(salary) as avg_salary
FROM employees
GROUP BY department_name
HAVING COUNT(*) > 5
ORDER BY avg_salary DESC;5-8주차: 고급 + 실무 쿼리
학습 내용:
- SUBQUERY (부쿼리)
- CASE WHEN (조건부 계산)
- WINDOW FUNCTION (행번호, 누적합)
- 복합 쿼리
-- 1. 부서별 연봉 랭킹
SELECT
department_id,
name,
salary,
RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) as rank
FROM employees;
-- 2. 누적 매출
SELECT
order_date,
sales,
SUM(sales) OVER (ORDER BY order_date) as cumulative_sales
FROM sales;
-- 3. 전년 대비 성장률
SELECT
category,
YEAR(order_date) as year,
SUM(amount) as total,
LAG(SUM(amount)) OVER (PARTITION BY category ORDER BY YEAR(order_date)) as prev_year_total
FROM sales
GROUP BY category, YEAR(order_date);---
SQL 학습 환경 설정
추천 데이터베이스
| 종류 | 난이도 | 추천도 | 비고 |
| SQLite | 쉬움 | ★★★★★ | 신입 최고 |
| MySQL | 보통 | ★★★★☆ | 실무 많음 |
| PostgreSQL | 어려움 | ★★★★☆ | 고급 기능 |
| 클라우드 (BigQuery) | 어려움 | ★★★☆☆ | 프로 수준 |
무료 학습 환경
Option 1: SQLite (가장 쉬움)
# 다운로드: sqlite.org
# 사용법:
sqlite3 mydb.db
.open mydb.db
CREATE TABLE users (id INT, name TEXT);Option 2: MySQL (권장)
# 다운로드: mysql.com
# 설치 후:
mysql -u root -p
CREATE DATABASE learning_db;
USE learning_db;Option 3: 온라인 코딩 환경
- LeetCode SQL
- HackerRank SQL
- Mode Analytics (데이터분석 특화)
SQL 실무 패턴 TOP 10
패턴 1: 특정 기간의 매출 분석
SELECT
DATE(order_date) as date,
COUNT(*) as order_count,
SUM(amount) as total_sales
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31'
GROUP BY DATE(order_date)
ORDER BY total_sales DESC;패턴 2: 고객별 구매 이력 조회
SELECT
c.customer_name,
COUNT(o.id) as purchase_count,
SUM(o.amount) as total_spent,
MAX(o.order_date) as last_purchase
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
GROUP BY c.id
ORDER BY total_spent DESC;패턴 3: 부서별 성과 평가
SELECT
d.department_name,
COUNT(e.id) as employee_count,
AVG(e.salary) as avg_salary,
SUM(p.revenue) as total_revenue
FROM departments d
LEFT JOIN employees e ON d.id = e.dept_id
LEFT JOIN projects p ON e.id = p.owner_id
GROUP BY d.id
HAVING COUNT(e.id) > 0
ORDER BY total_revenue DESC;---
비용 분석
무료 학습 (0원)
| 자료 | 수준 |
| Mode Analytics (온라인 튜토리얼) | 입문 |
| W3Schools SQL | 입문 |
| YouTube (SQL Tutorial) | 입문~중급 |
| LeetCode/HackerRank | 중급 |
저가 강의 (5만원 이내)
| 플랫폼 | 가격 | 강점 |
| 인프런 SQL 강의 | 49,000원 | 한국인 강사, 실무 중심 |
| 코드잇 | 월 9,900원 | 상호작용형 |
| 유데미 | 15,000원 | 영어 강의 |
구직 준비 (30만원)
| 과정 | 가격 | 기간 |
| SQL + Python + Tableau 패키지 | 300,000원 | 8주 |
| 데이터분석 부트캠프 | 400,000원 | 6주 |
취업 준비 SQL 포트폴리오
프로젝트: 온라인 쇼핑몰 데이터 분석
주제: 판매 데이터를 분석하여 마케팅 인사이트 제공
쿼리 예시:
-- 1단계: 상품별 판매 추이
SELECT
product_name,
MONTH(order_date) as month,
COUNT(*) as sales_count,
SUM(amount) as revenue
FROM orders
WHERE YEAR(order_date) = 2024
GROUP BY product_name, MONTH(order_date)
ORDER BY revenue DESC;
-- 2단계: 고객 세분화
SELECT
CASE
WHEN total_spent >= 1000000 THEN 'VIP'
WHEN total_spent >= 500000 THEN 'Gold'
ELSE 'Regular'
END as customer_tier,
COUNT(*) as customer_count,
AVG(total_spent) as avg_spent
FROM (
SELECT
customer_id,
SUM(amount) as total_spent
FROM orders
GROUP BY customer_id
)
GROUP BY customer_tier;
-- 3단계: 마켓팅 효과 분석
SELECT
campaign_name,
COUNT(DISTINCT customer_id) as reach,
COUNT(*) as conversions,
ROUND(100.0 * COUNT(*) / COUNT(DISTINCT customer_id), 2) as conversion_rate
FROM marketing_campaigns
GROUP BY campaign_name
ORDER BY conversion_rate DESC;README 예시:
# 쇼핑몰 데이터 분석
## 데이터셋
- customers: 10,000명
- orders: 50,000건
- products: 500개
## 분석 결과
1. **상품별 판매 추이**
- iPhone 13: 월 평균 500건 판매
- MacBook: 월 평균 200건 판매
2. **고객 세분화**
- VIP 고객(상위 10%): 전체 매출의 60% 차지
- 재구매율: VIP 80%, Regular 15%
3. **마케팅 효과**
- SNS 캠페인: 5% 전환율
- Email 캠페인: 3% 전환율
- 추천: SNS 마케팅 확대
## 활용 쿼리
- 총 5개 핵심 쿼리
- 모두 GitHub에 저장---
자주 묻는 질문 (FAQ)
1. SQL이 프로그래밍 언어인가?
A. 아니요, 데이터 질의 언어(Query Language). 훨씬 배우기 쉬움.2. 수학이 필요한가?
A. 기초 산술만 필요. 복잡한 수학은 불필요.3. 코딩 경험이 없어도 되나?
A. 네, SQL은 입문자 친화적. 코딩 경험 불필요.4. 어느 DB를 배워야 하나?
A. 신입은 MySQL 또는 SQLite 추천. 회사가 정하는 경우 많음.5. SQL만으로 취업 가능한가?
A. 가능하지만 Excel/시각화도 있으면 좋음. SQL이 60%를 차지.6. 얼마나 빨리 배울 수 있나?
A. 기초 2주, 실무 수준 2개월, 전문가 6개월.---
최종 SQL 학습 체크리스트
2개월 학습 후:
- [ ] SELECT, WHERE 완벽 숙달
- [ ] INNER/LEFT JOIN 이해 완료
- [ ] GROUP BY, HAVING 자유롭게 사용
- [ ] 실무 쿼리 10개 자체 개발
- [ ] 온라인 코딩 문제 50개 해결
- [ ] 포트폴리오 프로젝트 1개 완성
- [ ] GitHub에 쿼리 업로드
---
관련 콘텐츠: 교육 가이드