지난 ‘SQL 기초편’에서는 왜 마케터 또는 기획자가 SQL을 이용해 직접 데이터를 추출해야 하는지와 기본적인 구문 작성법들에 대해 알아보았어요. 이번 심화편에서는 코드 작성 양식에 해당하는 ‘순서와 들여쓰기’ 그리고 SQL 문법인 ‘Join’과 ‘Subquery’ 에 대해 이야기 해볼게요.
‘순서와 들여쓰기’가 뭐고 왜 고려해야하죠?
○ ‘순서와 들여쓰기(Indentation)’ 란? :
• 가독성과 유지보수성을 높이기 위한 범용적 규칙이에요.
1. 가독성
a. 순서를 정하면, 코드의 흐름을 파악하기 쉬워요.
b. 들여쓰기를 사용하면, 각 줄을 구분하여 코드를 보기 쉬워요.
2. 유지보수
a. 복잡하고 가독성이 낮으면, 수정이 어렵고 실수할 가능성이 높아요.
b. 순서와 들여쓰기를 사용하면, 수정이 필요한 부분을 빠르게 파악하여 관리가 용이해요.
왜 ‘JOIN’과 ‘Subquery’ 기능을 사용해야하나요?
○ ‘JOIN’ 이란? :
• 서로 다른 테이블을 하나의 Key 값으로 통합하는 문법이에요.
1. 데이터를 붙여서 추출
· 고객 정보가 저장된 customers 테이블과 주문 정보가 저장된 orders 테이블을 JOIN으로 연결하면 고객이 어떤 제품을 주문했는지 알아낼 수 있어요.
2. 효율적인 데이터 조회
· 하나의 테이블에서 데이터를 검색하면 속도가 느려질 수 있어요. 여러 테이블을 JOIN 을 통해 수행하면 속도가 향상돼요.
‘Subquery’ 란?
○ 다른 쿼리 내부에 포함되어 있는 SELECT 문장
1. 중첩되는 쿼리 수행
· 한 테이블에서 두 개의 열에 대한 값을 비교할 때 사용해요.
2. 조건에 맞게 필터링하여 조회
· 특정 조건을 만족하는 데이터를 조회할 때 사용해요.
이제 간단한 거래데이터에서 원하는 정보를 추출하는 작업을 통해 직접 확인해볼게요.
쿼리에 따른 결과를 제공하니, 어떤 값이 출력되는지 비교해보며 파악해 보세요!
[고객 데이터세트 예시 - Table 이름]: customers
id |
name |
1 |
리아 |
2 |
제이슨 |
3 |
클레어 |
[주문 데이터세트 예시 - Table 이름]: orders
id |
customer_id |
order_date |
1 |
1 |
2022-01-01 |
2 |
3 |
2022-01-02 |
3 |
1 |
2022-01-03 |
1. 순서 & 들여쓰기
1-1. 순서
○ SQL 문법들을 사용하는 순서는 다음과 같습니다.
1. SELECT: 가져올 열(column) 선택
2. FROM: 데이터를 가져올 테이블(table) 선택
3. JOIN : 결합할 테이블(table) 선택
4. WHERE: 가져올 데이터를 제한하는 조건(condition) 지정
5. GROUP BY: 결과를 그룹화하는 방법 지정
6. HAVING: 그룹화된 데이터에 대한 조건 지정
7. ORDER BY: 결과를 정렬하는 방법 지정
8. LIMIT : 출력할 행을 지정.
1-2. 들여쓰기 (Indentation)
○ 한번의 탭(tab) 또는 스페이스(space)를 4번 입력해 글자 간 간격을 확보해 주세요.
• 가독성있는 코드로 변환하고 싶다면 “SQL Formatter” 사용을 권장해요.
· 링크 : https://www.dpriver.com/pp/sqlformat.htm
일관성 있게 ‘순서와 들여쓰기’를 적용한 SQL 쿼리문 예시입니다.
2. JOIN
위의 예시에서 JOIN 기능이 들어가 있는 것을 볼 수 있어요. JOIN 은 ‘두개의 테이블을 연결해 데이터 추출이 필요한 경우’에 사용하고 아래와 같은 구조를 가져요.
2-1. JOIN
○ JOIN 에는 다양한 종류가 있지만 일반적인 4가지는 유형은 다음과 같아요.
1. INNER JOIN: 두 테이블에서 일치하는 열 값을 기준으로 행 결합
2. LEFT JOIN: 왼쪽 테이블의 모든 행 / 오른쪽 테이블에서 일치하는 행 결합
3. RIGHT JOIN: 오른쪽 테이블의 모든 행 / 왼쪽 테이블에서 일치하는 행 결합
4. FULL OUTER JOIN: 두 테이블의 모든 행 결합
이번에는 주로 사용되는 INNER JOIN과 LEFT JOIN을 소개해 드릴게요. (*RIGHT 와는 순서만 달라져요.)
2-2. LEFT JOIN
○ LEFT JOIN은 왼쪽 테이블의 모든 행과 오른쪽 테이블에서 일치하는 데이터를 가져와요.
• customers 테이블의 id 열과 orders 테이블의 customer_id 열을 기준으로 LEFT JOIN을 수행합니다.
· 참고 : customers 테이블에는 모든 고객 정보가 포함되어 있지만, orders 테이블에는 주문하지 않은 일부 고객이 있을 수 있어요.
name |
id |
order_date |
리아 |
1 |
2022-01-01 |
리아 |
3 |
2022-01-03 |
제이슨 |
NULL |
NULL |
클레어 |
2 |
2022-01-02 |
2-3. INNER JOIN
INNER JOIN은 두 테이블에서 일치하는 데이터만 가져와요.
○ customers 테이블의 id 열과 orders 테이블의 customer_id 열을 기준으로 INNER JOIN을 수행합니다.
name |
id |
order_date |
리아 |
1 |
2022-01-01 |
리아 |
3 |
2022-01-03 |
클레어 |
2 |
2022-01-02 |
3. Sub Query
서브쿼리는 하위 쿼리를 실행한 테이블을 추출하여, 상위 쿼리에서 사용하는 방법이에요.
○ 하나의 SELECT 문장 내에 포함된 또 하나의 SELECT 문장이 있는 쿼리문으로 이해하면 좋아요!
○ 고객명과 해당 고객의 총 주문 수를 검색하는 상황을 가정하고 다음과 같은 SQL 쿼리를 작성해보았어요.
• customers 테이블과 orders 테이블을 결합한 총 주문 수 계산.
name |
total_orders |
리아 |
1 |
제이슨 |
1 |
클레어 |
1 |
정리하기
○ SQL 기초편, 심화편에 있는 문법들 만으로 우리 비즈니스의 기본적인 데이터들을 모두 추출할 수 있어요.
○ 기초적인 지표들 외에도 LTV / Retention / Cohort와 같은 고도화된 지표들도 추적하여 개선한다면, 비즈니스 성장은 자연스럽게 따라와요.
○ 데이터를 단순히 추출하는 것을 넘어, 고도화된 지표 개선을 통해 비즈니스 성장을 경험하고자 하시는 분들은 언제든지 메이크대쉬로 문의주세요.
글: 김재욱, 여훈기
"우리 그로스 마케팅 좀 잘해요!" 하는 회사에서 공통적으로 얘기하는 ‘고객 세그멘테이션’, ‘코호트 분석’ …
중요하다고 강조하지만, 우리 비즈니스에 맞게 어떻게 잘 활용할 수 있는지 막막하셨나요?
메이크대쉬 웨비나를 통해 기초 개념부터 실제 활용사례까지 전부 확인해보세요!