이번 문제는 독립적인 두 테이블을 조건하에 결과를 낸 뒤 합쳐서 한 테이블에 출력하는 문제였다.
새롭게 배운 개념들이 여럿 있다.
이 문제에서 가장 핵심적인 개념이다. 두 테이블을 합칠 때 사용할 수 있는 예약어로 SELECT문과 SELECT문 사이에 넣어줘서 두개의 테이블을 합쳐서 하나의 테이블로 만들어준다. 이 것을 사용할 때에는 지켜야할 조건들이 있다.
위에서도 봤듯이 컬럼의 이름을 맞추어주어야한다. 그런데 OFFLINE_SALE 테이블에서는 ONLINE_SALE과 달리 USER_ID 컬럼이 없어서 이것을 맞추어주려면 새로 만들어야한다.
만드는 법은 다음과 같다.
SELECT ENO, NULL AS USER_ID
FROM EMPLOYEE;
새로운 컬럼이 생겼을 경우 줄 값을 AS앞에 적어주고(NULL이면 따옴표없이 NULL을 적어주면된다.) AS 뒤에 컬럼명을 적어주면 된다.
정렬을 할경우 컬럼을 적어주어야하는데 만약 이게 길어지면 매우 보기 좋지 않게 코드가 적혀질 수 있다.
근데 이 때 컬럼 번호를 사용하면 숫자로만 컬럼을 나타낼수 있어 코드가 간단해진다.
컬럼의 번호는 SELECT뒤에 컬럼의 순서로 1부터 시작한다.
TO_CHAR(SALES_DATE,'YYYY-MM-DD'), PRODUCT_ID , USER_ID, SALES_AMOUNT
위 코드에서 TOCHAR이 1, PRODUCT_ID가 2가 되는 것이다. 그래서 정렬을 할 경우 다음과 같이 코드가 굉장히 단순해진다.
ORDER BY 1,2,3;
SELECT TO_CHAR(SALES_DATE,'YYYY-MM-DD'), PRODUCT_ID , USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE TO_CHAR(SALES_DATE,'MM') = '03'
-- 조건문은 SELECT마다 붙여주어야한다.
UNION ALL -- UNION은 SELECT 와 SELECT 사이에 적어준다.
SELECT TO_CHAR(SALES_DATE,'YYYY-MM-DD'), PRODUCT_ID ,NULL AS USER_ID , SALES_AMOUNT
FROM OFFLINE_SALE
WHERE TO_CHAR(SALES_DATE,'MM') = '03'
ORDER BY 1,2,3; -- 컬럼 순으로 1,2,3이 자동으로 부여되는데 이걸 정렬에 사용하면 코드가 깨끗해진다.