Class/마케터를 위한 데이터 분석 기초/SQL 기초 문법과 마케터가 쓰는 쿼리 예시
초급

SQL 기초 문법과 마케터가 쓰는 쿼리 예시

/ 데이터 분석, AI 실무 교육

SQL은 표 형태로 쌓인 데이터에 어떤 줄을 어떻게 묶어서 보여 달라고 요청하는 말입니다. 프로그래밍 언어라기보다 빈칸을 채워 건네는 요청 문장에 가까워서, 문장 틀 여섯 조각만 익히면 마케터가 자주 묻는 것은 대부분 직접 뽑을 수 있습니다.

동의어:마케터 SQLSQL 기초SQL 쿼리 예시SELECT 문
Share

🤔 숫자 하나를 받으려고 사흘을 기다릴 때

채널별 매출이 궁금해 요청을 보내고 사흘 뒤에 받은 표를 열어 보면, 기간이 한 주 어긋나 있는 일이 있습니다. 다시 요청하면 또 며칠이 걸립니다.

자료가 없어서 생기는 문제가 아니라 자료를 꺼내 달라고 말하는 방법을 모르고 있어서 생기는 문제입니다. 그 말하는 방법에 붙은 이름이 SQL입니다. 이 글은 SQLD 같은 자격증을 준비하는 내용이 아니라, 마케터가 실무에서 쓰는 최소한만 다룹니다.

🔑 SQL의 정의

SQL은 표 형태로 쌓인 데이터에 어떤 줄을 어떻게 묶어서 보여 달라고 요청하는 말입니다.

원래 이름은 Structured Query Language, 즉 구조를 갖춘 질의 언어입니다. 언어라는 말 때문에 코딩을 떠올리기 쉽지만, SQL은 프로그래밍 언어라기보다 요청 문장에 가깝습니다. 절차를 짜는 대신 원하는 결과를 한 문장으로 적어 건네면, 값을 어떻게 찾아올지는 데이터베이스가 정합니다.

그래서 외울 것이 생각보다 적습니다. 문장 틀은 거의 고정되어 있고 상황마다 바뀌는 것은 표 이름과 조건뿐입니다.

🗂️ 주민센터 창구에 내미는 발급 신청서

주민센터에서 등본을 뗄 때 "서류 좀 주세요"라고 말하는 대신 신청서의 빈칸을 채워 내밀듯, 데이터베이스에 요청하는 일도 빈칸을 채운 종이 한 장을 건네는 것에 가깝습니다. 신청서에는 어떤 서류인지, 누구 것인지, 몇 통이 필요한지를 적는 칸이 정해져 있습니다.

SQL 문장도 같은 모양이어서, 무엇을 뽑을지, 어느 표에서 뽑을지, 어떤 조건에 맞는 줄만 볼지를 정해진 순서대로 적습니다. 창구 직원이 서류를 어느 캐비닛에서 꺼내 오는지 신청인이 알 필요가 없듯, 데이터베이스가 값을 찾는 방법도 요청하는 쪽에서 정하지 않습니다.

신청서의 빈칸을 하나라도 잘못 채우면 엉뚱한 서류가 나오듯, 조건을 잘못 적은 쿼리도 오류 없이 엉뚱한 값을 돌려줍니다.

🧩 문장을 이루는 여섯 조각

SQL 문장은 조각 여섯 개로 되어 있고 순서도 고정되어 있습니다. 각 조각이 한국어 문장의 어떤 부분을 맡는지 나란히 놓아 봅니다.

조각묻는 것한국어 문장에서 맡는 부분예시 문장에서 대응하는 말
SELECT무엇을보여 달라고 말하는 목적어채널과 주문 수와 매출을
FROM어디서그 값이 들어 있는 곳주문 표에서
WHERE어떤 조건으로 거른 줄만대상을 좁히는 관형절8월에 들어온
GROUP BY무엇끼리 묶어서묶음의 기준채널별로 묶어
ORDER BY어떻게 정렬해순서를 정하는 말매출이 큰 순서로
LIMIT몇 줄만개수를 제한하는 말다섯 줄만

8월에 들어온 주문을 채널별로 묶어 매출이 큰 순서로 다섯 줄만 보여 줘라는 요청을 그대로 여섯 조각에 나눠 넣으면 아래 문장이 됩니다.

SELECT channel, -- 무엇을: 채널 이름 COUNT(*) AS order_count, -- 무엇을: 주문 건수 SUM(revenue) AS total_revenue -- 무엇을: 매출 합계 FROM orders -- 어디서: 주문 표 WHERE order_date >= '2026-08-01' AND order_date < '2026-09-01' -- 어떤 조건: 8월에 들어온 줄만 GROUP BY channel -- 무엇끼리: 채널별로 ORDER BY total_revenue DESC -- 어떻게: 매출이 큰 순서로 LIMIT 5; -- 몇 줄만: 다섯 줄

COUNT(*)는 줄 수를 세고 SUM()은 값을 더합니다. AS는 결과 표에 붙일 열 이름이고 DESC는 큰 값부터 내려간다는 뜻으로, 이 네 가지는 집계 문장에서 거의 매번 함께 나옵니다.

💻 마케터가 자주 쓰는 쿼리 다섯 가지

표 이름과 열 이름은 회사마다 다릅니다. orderschannel 자리에 들어가는 이름만 바꾸면 그대로 씁니다.

채널마다 주문이 몇 건이고 매출이 얼마인지

SELECT channel, COUNT(*) AS order_count, SUM(revenue) AS total_revenue FROM orders WHERE order_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) -- 최근 30일 GROUP BY channel ORDER BY total_revenue DESC;

날짜마다 가입 전환이 몇 건 일어났는지

SELECT event_date, COUNT(*) AS conversions FROM events WHERE event_name = 'sign_up' -- 볼 이벤트 하나만 고른다 AND event_date BETWEEN '2026-08-01' AND '2026-08-31' GROUP BY event_date ORDER BY event_date;

특정 조건에 맞는 고객이 몇 명인지

SELECT COUNT(DISTINCT customer_id) AS customers FROM orders WHERE order_date >= '2026-08-01' AND order_date < '2026-09-01' AND channel = 'naver'; -- DISTINCT가 같은 사람을 한 번만 센다

두 기간의 매출이 얼마나 달라졌는지

SELECT SUM(CASE WHEN order_date < '2026-08-01' THEN revenue ELSE 0 END) AS jul_revenue, SUM(CASE WHEN order_date >= '2026-08-01' THEN revenue ELSE 0 END) AS aug_revenue FROM orders WHERE order_date >= '2026-07-01' AND order_date < '2026-09-01'; -- CASE WHEN은 조건에 맞을 때만 더한다

사이트 안에서 가장 많이 검색된 말이 무엇인지

SELECT search_term, COUNT(*) AS search_count FROM site_search_logs WHERE searched_at >= '2026-08-01' AND searched_at < '2026-09-01' GROUP BY search_term ORDER BY search_count DESC LIMIT 20;

다섯 문장의 뼈대는 모두 같습니다. 바뀐 것은 표 이름과 조건, 묶는 기준뿐입니다.

🔗 두 표를 이어 붙이는 JOIN

주문 표에는 고객 번호만 있고 그 고객이 어느 채널로 가입했는지는 고객 표에 따로 있는 경우가 흔합니다. 이럴 때 두 표를 공통 열로 맞춰 한 표처럼 읽게 만드는 것이 JOIN입니다. 서류 두 장을 같은 접수번호로 맞춰 겹쳐 놓듯, 양쪽에 다 있는 열을 짝짓는 조건만 적어 주면 됩니다.

SELECT o.order_id, o.revenue, c.signup_channel FROM orders AS o JOIN customers AS c ON o.customer_id = c.customer_id;

JOIN은 종류가 여럿이고 짝이 맞지 않는 줄을 어떻게 처리할지에 따라 결과가 달라집니다. 처음에는 JOIN이 필요한 상황이 어떤 때인지 알아 두는 정도면 충분합니다. 보고 싶은 값이 한 표 안에 다 있으면 쓰지 않고, 두 표에 나뉘어 있을 때만 꺼냅니다.

🎯 마케터가 SQL을 익히면 달라지는 것

  • 요청하고 기다리지 않아도 됩니다: 사흘 걸리던 확인이 몇 분으로 줄면 회의 중에 바로 답을 냅니다
  • 질문을 조금 바꿔 다시 볼 수 있습니다: 기간을 넓히거나 채널 하나를 빼는 정도는 조건 한 줄만 고치면 됩니다
  • 숫자가 어떻게 만들어졌는지 알게 됩니다: 대시보드의 매출이 어느 표에서 어떤 조건으로 집계된 값인지 보이면 확인할 곳이 좁혀집니다

다만 SQL이 분석을 대신하지는 않습니다. 쿼리는 물어본 것만 돌려주므로, 무엇을 물어볼지 정하는 일과 나온 숫자를 어떻게 판단할지는 여전히 사람이 합니다. KPI를 잘못 잡아 두면 쿼리를 빨리 돌려도 틀린 숫자를 더 빨리 보게 될 뿐입니다.

🧪 어디서 연습하는지

  • 빅쿼리 콘솔: GA4를 BigQuery로 내보내 두었다면 웹 콘솔에서 바로 씁니다. 회사 데이터를 다루므로 연습이 곧 업무가 됩니다
  • 스프레드시트 부가 기능: 구글 시트에도 표를 거르고 묶는 함수가 있어서, 표 이름 대신 범위를 적는 차이만 익히면 됩니다
  • 사내 분석 도구: 팀에서 쓰는 도구에 쿼리 편집 화면이 있으면 그곳이 가장 빠릅니다. 다만 권한이 읽기 전용인지 먼저 확인하는 편이 안전합니다

무료로 쓰는 범위는 서비스마다 다르고 시점에 따라 바뀌므로 쓰는 시점의 공식 요금 문서를 확인하는 편이 맞습니다. 연습용으로는 ETL로 정리해 둔 작은 표 하나면 충분합니다.

⚠️ 자주 하는 실수

  • SELECT *로 표 전체를 읽는 것: 별표는 모든 열을 뜻해서 열이 수백 개인 표에서는 필요 없는 값까지 읽습니다. 읽은 양만큼 비용이 붙는 곳도 있어 쓸 열만 적는 편이 안전하고 결과도 빨리 나옵니다
  • 기간 조건을 빼먹는 것: WHERE에 날짜 조건이 없으면 표에 쌓인 처음부터 지금까지가 전부 집계됩니다. 숫자가 유난히 크면 기간 조건이 들어갔는지부터 확인합니다
  • 중복 집계를 눈치채지 못하는 것: 두 표를 이어 붙였을 때 한쪽에 같은 고객이 여러 줄로 들어 있으면 주문 하나가 여러 번 세어집니다. 고객 수를 셀 때 COUNT(DISTINCT customer_id)를 쓰는 이유가 이것입니다

중복 집계가 가장 늦게 드러납니다. 문장은 정상으로 실행되고 숫자만 커져 있어서, 합계가 평소보다 크면 줄 수부터 세어 봅니다. 채널별 숫자를 모델마다 다르게 집계하는 방법은 GA4 빅쿼리 어트리뷰션 분석에 쿼리와 함께 정리해 두었습니다.

❓ 자주 묻는 질문

SQLD 같은 자격증을 따야 하나요?

실무에서 쿼리를 쓰는 데 자격증이 필요하지는 않습니다. 자격증은 데이터베이스 설계와 이론까지 다루지만 마케팅 업무에서 쓰는 것은 그 가운데 조회 문장 일부입니다. 이력서에 자격이 필요한 상황이 아니라면 실제로 쓸 다섯 문장을 먼저 익히는 쪽이 낫습니다.

엑셀이나 스프레드시트를 잘하면 SQL은 필요 없나요?

피벗 테이블로 하던 일과 SQL로 하는 일은 상당 부분 겹칩니다. 달라지는 곳은 데이터 양과 반복입니다. 수십만 행을 넘어가면 시트가 느려지고, 매주 같은 정리를 되풀이한다면 쿼리 한 줄을 저장해 두는 쪽이 빠릅니다.

쿼리를 잘못 써서 데이터가 지워지지는 않나요?

SELECT로 시작하는 문장은 읽기만 해서 원본이 바뀌지 않습니다. 값을 바꾸거나 지우는 명령은 따로 있고, 마케팅 담당 계정에는 읽기 권한만 주는 경우가 많습니다. 계정을 받을 때 권한을 확인해 두면 마음 놓고 연습해도 됩니다.

어느 정도까지 배우면 실무에 쓸 수 있나요?

이 글에서 다룬 여섯 조각과 JOIN 하나면 마케팅 업무에서 나오는 질문의 상당 부분에 답할 수 있습니다. 더 복잡한 문법은 필요해진 시점에 그 문제를 풀면서 익히는 편이 낫고, 미리 공부해 두면 쓸 일이 없어 잊어버리기 쉽습니다.

📋 3줄 요약

  1. SQL은 표 형태로 쌓인 데이터에 어떤 줄을 어떻게 묶어서 보여 달라고 요청하는 말입니다.

  2. 무엇을 어디서 어떤 조건으로 어떻게 묶어 몇 줄만 볼지 적는 여섯 조각이면 마케터가 자주 묻는 것은 대부분 문장으로 만들 수 있습니다.

  3. SQL은 물어본 것만 돌려주므로 무엇을 물어볼지 정하는 일과 나온 숫자를 판단하는 일은 여전히 사람이 합니다.

이 글이 도움이 되셨다면 공유해 주세요

메신저로 바로 보내거나 링크를 복사할 수 있습니다.

퀴즈

채널별 매출을 큰 순서로 다섯 줄만 보려고 할 때, 다섯 줄로 끊는 일을 맡는 조각은 무엇일까요?

관련 인사이트

학습 진행

14 / 16
About the Author
Author
HI!

마케팅을 데이터로 설명하는 사람. 복잡한 상황을 이해 가능한 형태로 정리합니다.

GA4GTM퍼널분석
더 알아보기