문제 설명
다음은 어느 의류 쇼핑몰의 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블과 오프라인 상품 판매 정보를 담은 OFFLINE_SALE 테이블 입니다. ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며, ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다.
동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.
OFFLINE_SALE 테이블은 아래와 같은 구조로 되어있으며, OFFLINE_SALE_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 오프라인 상품 판매 ID, 상품 ID, 판매량, 판매일을 나타냅니다.
문제
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
^ㅁ^
'TIL > SQL' 카테고리의 다른 글
프로그래머스| 자동차 대여 기록 별 대여 금액 구하기(MySQL) (0) | 2024.08.09 |
---|---|
프로그래머스| 입양 시각 구하기(2) (MySQL) <RECURSIVE CTE> (2) | 2024.08.07 |
프로그래머스| 그룹별 조건에 맞는 식당 목록 출력하기(My SQL) (0) | 2024.08.02 |
프로그래머스| 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기(My SQL) (0) | 2024.08.02 |
TIL (8/1) 윈도우 함수(My SQL) (0) | 2024.08.01 |