SQL을 공부하다 보면 단일 테이블에서 SELECT로 데이터를 추출하는 것만으로는 한계가 있다는 걸 금방 느끼게 된다. 예를 들어 고객 정보와 주문 정보가 각각 다른 테이블에 있다면, 두 데이터를 하나로 묶어야만 실무 분석이 가능하다. 바로 이런 상황에서 필요한 것이 JOIN이다. 또한 데이터를 특정 기준으로 묶고 집계해야 할 때는 GROUP BY가 핵심 도구가 된다.
이 글은 비개발자, 마케터, 데이터 담당자가 실무에서 자주 접하는 상황을 가정하여 JOIN과 GROUP BY를 쉽게 이해하고 활용할 수 있도록 구성되었다. AI 없이 직접 SQL을 작성할 수 있도록 직관적인 예제로 설명한다.
🧱 예제 데이터 구조 설명
이번에는 두 개의 테이블을 활용한다.
1. users 테이블
필드명 | 자료형 | 설명 |
user_id | INT | 사용자 고유 ID |
user_name | TEXT | 사용자 이름 |
signup_date | DATE | 가입 일자 |
2. orders 테이블
필드명 | 자료형 | 설명 |
order_id | INT | 주문 고유 번호 |
user_id | INT | 주문자 ID (외래키) |
amount | INT | 주문 금액 |
order_date | DATE | 주문 날짜 |
🔗 JOIN 문법과 실전 예제
JOIN이란?
JOIN은 두 개 이상의 테이블을 공통된 컬럼을 기준으로 연결하는 SQL 구문이다.
기본 문법:
SELECT *
FROM A
JOIN B
ON A.공통컬럼 = B.공통컬럼;
예제 1: 주문 정보에 사용자 이름 붙이기
목표: 각 주문에 대해 어떤 사용자가 주문했는지 알아보자.
SELECT
orders.order_id,
users.user_name,
orders.amount
FROM orders
JOIN users
ON orders.user_id = users.user_id;
결과 예시:
order_id | user_name | amount |
101 | 김철수 | 120000 |
102 | 이영희 | 90000 |
103 | 김철수 | 150000 |
예제 2: 특정 사용자의 주문만 보기
SELECT
users.user_name,
orders.amount,
orders.order_date
FROM orders
JOIN users
ON orders.user_id = users.user_id
WHERE users.user_name = '김철수';
orders 테이블의 user_id와 users 테이블의 user_id가 동일할 때에, 위와 같은 쿼리로 user_name이 '김철수'인 사용자의 주문량과 주문일자를 확인할 수 있다.
📊 GROUP BY 문법과 실전 예제
GROUP BY란?
GROUP BY는 특정 컬럼을 기준으로 데이터를 묶고, 그 안에서 SUM, AVG, COUNT 등 집계 함수를 사용할 수 있게 해준다.
기본 문법:
SELECT 컬럼, 집계함수()
FROM 테이블
GROUP BY 컬럼;
예제 3: 사용자별 총 주문 금액 계산
SELECT
users.user_name,
SUM(orders.amount) AS total_spent
FROM orders
JOIN users
ON orders.user_id = users.user_id
GROUP BY users.user_name;
결과 예시:
user_name | total_spent |
김철수 | 270000 |
이영희 | 90000 |
이 쿼리는 각 사용자별로 주문 금액을 합산하여 보여준다.
예제 4: 월별 주문 건수 분석
SELECT
strftime('%Y-%m', order_date) AS order_month,
COUNT(*) AS order_count
FROM orders
GROUP BY order_month
ORDER BY order_month;
SQLite, PostgreSQL에서는 strftime, MySQL은 DATE_FORMAT을 사용하니 참고.
결과 예시:
order_month | order_count |
2025-06 | 4 |
2025-07 | 7 |
📌 실전에서의 활용 포인트
- JOIN은 테이블 간 관계형 데이터 분석의 핵심이다.
- GROUP BY는 리포트, 매출 분석, 트렌드 파악에 거의 항상 필요하다.
- 이 둘을 조합하면 거의 모든 실무 데이터 분석을 수행할 수 있다.
결론
JOIN과 GROUP BY는 SQL에서 가장 강력한 기능이자, 실무에서 가장 자주 사용되는 쿼리 유형이다. 비개발자라고 해도 테이블 구조만 이해하고 예제를 따라가면 충분히 원하는 데이터를 뽑아낼 수 있다. 실무 데이터와 유사한 예제를 통해 SQL 분석의 실전 감각을 키워보자.
지금까지의 내용을 이해한다면 이제 더 복잡한 조건부 집계, 서브쿼리, 윈도우 함수 등도 배워나갈 준비가 된 것이다.
'개발 > SQL' 카테고리의 다른 글
1. 비개발자를 위한 SQL 입문: 실무 예제로 배우는 SELECT 쿼리 (2) | 2025.08.01 |
---|