관리 메뉴

FlOWING SINI

액셀보다 쉽고 빠른 SQL - 데이터 연결하기 본문

PM TIL/Tech Lecture

액셀보다 쉽고 빠른 SQL - 데이터 연결하기

by SINI 2026. 6. 2. 11:36

1. 오늘 학습 키워드

- SUBQUERY
- JOIN (LEFT JOIN, INNER JOIN)


2. 오늘 학습 한 내용을 나만의 언어로 정리하기

 

<여러번의 연산을 한 번의 SQL문으로 수행하기> - Subquery

Subquery 기본 구조

 

 


Subquery가 필요한 경우

  • 여러번의 연산을 수행해야 할 때
    ex) 음식 준비 시간이 25분보다 초과한 시간을 가져오가
  • 조건문에 연산 결과를 사용해야 할 때
  • 조건에 Query 결과를 사용하고 싶을 때

 

<조건문과 Subquery 결합>

ex) segmentation을 진행 후 그룹에 따라 수수료 연산하기 (수수료 구간 - 5000원 미만 0.05% 5000원 이상 ~ 20,000원 미만 1% 20000원 이상 ~ 30,000원 미만:2% 30000원 이상 3%)

*가장 가운데 있는 괄호를 먼저 보기
*중간 Query 구문만의 결과를 보고 싶으면 그 구문만 선택 후 실행

ex) 음식점의 지역과 평균 배달시간으로 segmentation 하기

 

 

<복잡한 연산을 Subquery로 수행하기>

ex) 음식 타입별 지역별 총 주문수량과 음식점 수 연산 후 주문수량과 음식점수 별 수수료율을 산정하기 (음식점수 5개 이상, 주문수 30개 이상 → 수수료 0.5% 음식점수 5개 이상, 주문수 30개 미만 → 수수료 0.8% 음식점수 5개 미만, 주문수 30개 이상 → 수수료 1% 음식점수 5개 미만, 주문수 30개 미만 → 수수로 2%)

 

ex) 음식점의 총 주문수량과 주문 금액을 연산하고, 주문 수량을 기반으로 수수료 할인율 구하기 (할인조건 수량이 5개 이하 → 10% 수량이 15개 초과, 총 주문금액이 300000 이상 → 0.5% 이 외에는 일괄 1%)

 

 

<필요한 데이터가 서로 다른 테이블에 있을 때 조회하기> - JOIN

  • JOIN
    - 액셀의 Vlookup과 유사

액셀 예시

- 두 테이블이 공통으로 갖고 있는 컬럼으로 묶어주는 것

공통 컬럼을 기준으로 두 테이블을 합쳐서, 각각 테이블에서 필요한 데이터를 조회

 

  • JOIN 방법

 

left join과 inner join 기본 구조

 

- LEFT JOIN
공통 컬럼(키값)을 기준으로, 하나의 테이블에 값이 없더라도 조회되는 경우

 

- INNER JOIN
공통 컬럼(키값)을 기준으로, 두 테이블 모두에 있는 값만 조회되는 경우

 

 

ex) 름식 주문 정보 테이블과 결제 정보 시스템 테이블의 공통된 컬럼을 left join으로묶어주기

 

ex) 름식 주문 정보 테이블과 결제 정보 시스템 테이블의 공통된 컬럼을 inner join으로 묶어주기

 

 

ex) 음식 주문 테이블과 고객 테이블을 cusomer_id 를 기준으로 left join 으로 묶어보기



- JOIN으로 두 테이블의 데이터 조회하기

ex) 한국 음식의 주문별 결제 수단과 수수료율을 조회하기 (조회 컬럼 : 주문 번호, 식당 이름, 주문 가격, 결제 수단, 수수료율) *결제 정보가 없는 경우도 포함하여 조회
ex) 고객의 주문 식당 조회하기 (조회 컬럼 : 고객 이름, 연령, 성별, 주문 식당) *고객명으로 정렬, 중복 없도록 조회

*distinct를 사용해 중복 값을 없애줌

 

 

- JOIN으로 두 테이블의 값을 연산하기

ex) 주문 가격과 수수료율을 곱하여 주문별 수수료 구하기 (조회 컬럼 : 주문 번호, 식당 이름, 주문 가격, 수수료율, 수수료) *수수료율이 있는 경우만 조회
50세 이상 고객의 연령에 따라 경로 할인율을 적용하고, 음식 타입별로 원래 가격과 할인 적용 가격 합을 구하기 (조회 컬럼 : 음식 타입, 원래 가격, 할인 적용 가격) *할인 : (나이-50)*0.005 * 고객 정보가 없는 경우도 포함하여 조회, 할인 금액이 큰 순서대로 정렬


3. 학습하며 겪었던 문제점 & 에러

1)

 학습 과정에서 Subquery 사용 방법에 어려움을 느꼈다. 특히 이전에 학습했던 연산들을 함께 활용하여 응용하는 과정에서 어떤 위치에 Subquery를 작성해야 하는지 많이 헷갈렸다.

 이를 해결하기 위해 다양한 예제를 풀어보며 Query의 실행 순서를 확인했다. 그 과정에서 Subquery가 독립적으로 실행된 후 그 결과를 Main Query에서 활용한다는 개념을 이해할 수 있었다. 다만 아직 개념이 완전히 정립되지는 않아 다양한 문제에 적용해보며 지속적으로 학습할 필요성이 있다고 느꼈다.

2)

 학습 과정에서 LEFT JOIN과 INNER JOIN의 개념을 이론적으로는 이해하고 있었지만, 실제 문제에 적용할 때는 왜 해당 JOIN을 사용해야 하는지 명확하게 떠올리지 못해 어려움을 느꼈다.

 이를 해결하기 위해 두 JOIN의 결과를 직접 비교하며 학습했고 각 JOIN이 반환하는 데이터의 차이를 이해할 수 있었다.

3)

 학습 과정에서 SQL 수식이 점점 길어지고 복잡해질수록 어려움을 느꼈다. 특히 아직 다양한 구조문에 익숙하지 않은 상태에서 한 번에 많은 내용이 들어오다 보니 어떤 구조문을 사용해야 하는지 쉽게 떠올리지 못했다.

 이를 해결하기 위해 이전에 학습했던 내용을 다시 살펴보고 현재 문제와 비교하며 학습했다. 또한 Query를 작은 단위로 나누어 해석하고 각 조건이 어떤 역할을 하는지 하나씩 확인해 보았다. 그 결과 복잡한 Query일수록 전체를 한 번에 이해하려 하기보다 단계별로 분석하는 것이 중요하다는 점을 알게 되었으며 이러한 개념을 확실히 익히기 위해서는 지속적인 학습이 필요하다고 느꼈다.