https://school.programmers.co.kr/learn/courses/30/lessons/131537
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음에는 Join을 이용해서 푸는 문제인줄 알았는데 Union을 사용하는 거였다.
[Union 동작 방식]
[문법]
SELECT column1, column2, column3,... column_N
FROM table1
UNION
SELECT column1, column2, column3,.. column_N
FROM table2;
참고로 union과 join의 차이점은 아래 그림과 같다.
Union은 중복을 제거하지만 Union all은 모든 컬럼 값이 같은 row도 보여준다는 차이가 있다.
[정답]
-- 코드를 입력하세요
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE DATE_FORMAT(SALES_DATE, '%y%m') = '2203'
UNION
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE DATE_FORMAT(SALES_DATE, '%y%m') = '2203'
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
online_sale 에는 user_id 컬럼이 있지만 offline_sale에는 해당 컬럼이 존재하지 않는다.
union을 사용할 때는 컬럼 수와 데이터 타입이 일치해야 하기 때문에 이럴 경우 없는 컬럼 위치에 null을 쓰고 컬럼의 이름을 일치시키면 된다.
참고로 컬럼의 이름이 같아야 union이 되기 때문에 만약 테이블의 컬럼명이 다르다면 alias를 사용해 일치시켜줘야 한다.
정렬을 전체 테이블에 적용시키고 싶다면 맨 마지막에 적어주면 된다.
'내배캠 > TIL' 카테고리의 다른 글
세션 (Session) (0) | 2024.09.24 |
---|---|
[SQL] 세션 변수 (0) | 2024.09.19 |
트랜잭션 격리 수준 (0) | 2024.09.12 |
[스프링] 테스트 (1) | 2024.09.11 |
[스프링] AOP (0) | 2024.09.10 |