✏️ 문제
✏️ 정답
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, IFNULL(USER_ID, NULL) AS USER_ID, SALES_AMOUNT
FROM (
SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT FROM ONLINE_SALE
UNION
SELECT SALES_DATE, PRODUCT_ID, NULL, SALES_AMOUNT FROM OFFLINE_SALE
) A
WHERE MONTH(SALES_DATE) = 3
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;
문제에서 'OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해 주세요.'이라는 조건이 있기 때문에 IFNULL을 사용해 준다.
※ 뒤에 A(아무거나)라고 별칭(alias)을 써주지 않으면 오류가 난다.
▶ IFNULL()
IFNULL() 함수는 식이 NULL인 경우 지정된 값을 반환한다. 표현식이 NOT NULL이면 이 함수는 표현식을 반환한다.
-- Syntax
IFNULL(expression, alt_value)
-- Parameter Values
-- expression(필수) : expression이 NULL인지 아닌지 확인한다
-- alt_value(필수) : expression이 NULL이면 alt_value을 반환한다
▶ UNION
UNION 연산자는 둘 이상의 SELECT 명령문의 결과 집합을 결합하는 데 사용된다.
- 사용 조건
- UNION 안에 모든 SELECT 명령문은 동일한 수의 열이 있어야 한다.
- 열의 데이터 유형도 유사(similar data type) 해야 한다.
- 모든 SELECT 명령문의 열도 동일한 순서여야 한다.
-- UNION Syntax
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
UNION 연산자는 기본적으로 고유한 값만 선택한다. 중복 값을 허용하려면 UNION ALL을 사용해야 한다.
-- UNION ALL Syntax
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
날짜 설정은 아래 글 참고
2023.01.10 - [SQL] - [SQL 고득점 kit - SELECT] 3월에 태어난 여성 회원 목록 출력하기 / 'YEAR-MONTH-DATE' 형태로 보여주기
😃 공부하면서 적는 글입니다. 공감이나 피드백 환영합니다.