
프로그래머스 ORACLE 오프라인/온라인 판매 데이터 통합하기 (SELECT)DB/쿼리 문제풀이2024. 3. 25. 22:00
Table of Contents
데이터 차례로 확인해보기 1
SELECT TO_CHAR(SALES_DATE, 'YYYY-MM-DD') AS SALES_DATE
, PRODUCT_ID
, USER_ID
, SALES_AMOUNT
FROM ONLINE_SALE
WHERE TO_CHAR(SALES_DATE, 'YYYYMM') = '202203'

2
SELECT TO_CHAR(SALES_DATE, 'YYYY-MM-DD') AS SALES_DATE
, PRODUCT_ID
, NULL AS USER_ID
, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE TO_CHAR(SALES_DATE, 'YYYYMM') = '202203'

3
SELECT TO_CHAR(SALES_DATE, 'YYYY-MM-DD') AS SALES_DATE
, PRODUCT_ID
, USER_ID
, SALES_AMOUNT
FROM ONLINE_SALE
WHERE TO_CHAR(SALES_DATE, 'YYYYMM') = '202203'
UNION ALL
SELECT TO_CHAR(SALES_DATE, 'YYYY-MM-DD') AS SALES_DATE
, PRODUCT_ID
, NULL AS USER_ID
, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE TO_CHAR(SALES_DATE, 'YYYYMM') = '202203'

정답
SELECT *
FROM (
SELECT TO_CHAR(SALES_DATE, 'YYYY-MM-DD') AS SALES_DATE
, PRODUCT_ID
, USER_ID
, SALES_AMOUNT
FROM ONLINE_SALE
WHERE TO_CHAR(SALES_DATE, 'YYYYMM') = '202203'
UNION ALL
SELECT TO_CHAR(SALES_DATE, 'YYYY-MM-DD') AS SALES_DATE
, PRODUCT_ID
, NULL AS USER_ID
, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE TO_CHAR(SALES_DATE, 'YYYYMM') = '202203'
)
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
📌UNION ALL
두 개 이상의 SELECT 문의 결과를 하나의 결과 집합으로 합치는 데 사용되는 SQL 연산자입니다. 중복을 제거하지 않고 모든 행을 결과에 포함합니다. 여기에 간단한 예제를 제시하겠습니다.
예를 들어, 다음과 같이 두 개의 테이블이 있다고 가정해보겠습니다.
테이블 A:
ID Name
1 | Alice |
2 | Bob |
3 | Charlie |
테이블 B:
ID Name
2 | David |
3 | Eve |
4 | Frank |
이제 다음의 UNION ALL 쿼리를 실행하면 두 테이블의 모든 행이 합쳐진 결과가 나타납니다.
SELECT ID, Name FROM A
UNION ALL
SELECT ID, Name FROM B;
결과:
ID Name
1 | Alice |
2 | Bob |
3 | Charlie |
2 | David |
3 | Eve |
4 | Frank |
UNION ALL은 중복을 제거하지 않기 때문에, 같은 값을 가진 여러 행이 결과에 포함될 수 있습니다.
알겠습니다. UNION ALL 연산을 사용할 때, 각 SELECT 문의 컬럼 수가 일치하지 않는 경우에는 NULL로 채워지게 됩니다. 즉, 두 개 이상의 SELECT 문에서 각각 같은 위치의 컬럼이 없는 경우 NULL이 채워지게 됩니다. 이를 통해 결과의 각 행마다 컬럼 수가 일치하도록 유지됩니다.
예를 들어, 다음과 같은 두 개의 테이블이 있다고 가정해보겠습니다.
Table A:
ID Name Phone
1 | Alice | 123-4567 |
2 | Bob |
Table B:
ID Email
1 | mailto:alice@example.com |
3 | mailto:bob@example.com |
두 테이블을 다음과 같이 UNION ALL 연산으로 합칠 때:
SELECT ID, Name, Phone, NULL AS Email FROM TableA
UNION ALL
SELECT ID, NULL AS Name, NULL AS Phone, Email FROM TableB;
결과는 다음과 같습니다:
ID Name Phone Email
1 | Alice | 123-4567 | NULL |
2 | Bob | NULL | NULL |
1 | NULL | NULL | mailto:alice@example.com |
3 | NULL | NULL | mailto:bob@example.com |
각 SELECT 문의 컬럼 수가 일치하지 않는 경우, 해당 컬럼에 맞게 NULL 값이 채워져서 UNION ALL 결과가 생성됩니다.
'DB > 쿼리 문제풀이' 카테고리의 다른 글
프로그래머스 ORACLE 그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2023.10.06 |
---|---|
프로그래머스 ORACLE 5월 식품들의 총매출 조회하기 (0) | 2023.10.06 |
프로그래머스 ORACLE 보호소에서 중성화한 동물 (0) | 2023.10.06 |
프로그래머스 ORACLE 오랜 기간 보호한 동물(1) (0) | 2023.10.06 |
프로그래머스 ORACLE 있었는데요 없었습니다 (0) | 2023.10.06 |