TIL/SQL

프로그래머스| 오프라인/온라인 판매 데이터 통합하기(My SQL)

jojoon2786 2024. 8. 5. 11:16

문제 설명
다음은 어느 의류 쇼핑몰의 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블과 오프라인 상품 판매 정보를 담은 OFFLINE_SALE 테이블 입니다. ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며, ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다.

online_sale 테이블

동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.

 

OFFLINE_SALE 테이블은 아래와 같은 구조로 되어있으며, OFFLINE_SALE_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 오프라인 상품 판매 ID, 상품 ID, 판매량, 판매일을 나타냅니다.

offline_sale 테이블

 

문제

ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요. 결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요.

 

나의 풀이)

쿼리

union 함수

  • 여러 쿼리문들을 합쳐서 하나의 쿼리문으로 만들어주는 방법이다.
  • 중복된 값을 제거하고 보여준다.
  • 중복된 값을 제거하는 연산이 추가로 수행되기 때문에 UNION ALL보다 속도가 느리다.

union all 함수

  • UNION과 동일하게 여러 쿼리문들을 합쳐서 하나의 쿼리문으로 만들어주는 방법이다.
  • 중복된 값을 모두 보여준다.

사용방법

  • 컬럼명이 동일해야 한다. (같지 않을 경우 AS 를 이용해서 동일하게 맞춰줘야 한다.)
  • 컬럼별로 데이터 타입이 동일해야 한다.
  • 출력할 컬럼의 개수가 동일해야 한다.

◆ join과 union의 차이점?

join은 새로운 열이 만들어져 쿼리에 붙는다. --> 수평 결합

union은 맞춰준 컬럼에 아래에 데이터로 붙는다. --> 수직 결합

 

offline_sale 테이블의 user_id는 null값으로 넣어주세요 > select nulle

 

^ㅁ^