리텐틱스(Retentics) 인사이트

SQL 지침서 - 심화편

리텐틱스(Retentics)

2023.03.15 08:00
  • 1283
  • 콘텐츠에 ‘좋아’해줘서 고마워요 -
    1
  • 3

지난 ‘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

 리아

 제이슨

 클레어

 

 

 

정리하기

 

○ SQL 기초편, 심화편에 있는 문법들 만으로 우리 비즈니스의 기본적인 데이터들을 모두 추출할 수 있어요.

○ 기초적인 지표들 외에도 LTV / Retention / Cohort와 같은 고도화된 지표들도 추적하여 개선한다면, 비즈니스 성장은 자연스럽게 따라와요.

○ 데이터를 단순히 추출하는 것을 넘어, 고도화된 지표 개선을 통해 비즈니스 성장을 경험하고자 하시는 분들은 언제든지 메이크대쉬로 문의주세요.

 

글: 김재욱, 여훈기

 

"우리 그로스 마케팅 좀 잘해요!" 하는 회사에서 공통적으로 얘기하는 ‘고객 세그멘테이션’, ‘코호트 분석’ … 

중요하다고 강조하지만, 우리 비즈니스에 맞게 어떻게 잘 활용할 수 있는지 막막하셨나요?

 

메이크대쉬 웨비나를 통해 기초 개념부터 실제 활용사례까지 전부 확인해보세요!

 

>>메이크대쉬 웨비나 신청 바로가기(클릭)<<

  • #SQL