일반적인 SELECT 쿼리는 다음 순서로 실행
(실행되는 순서지, 작성하는 순서는 아님!)
🔹 실행 순서
1️⃣ FROM → 데이터를 가져올 테이블 지정
2️⃣ WHERE → 조건에 맞는 데이터 필터링
3️⃣ GROUP BY → 같은 값끼리 그룹화
4️⃣ HAVING → 그룹화된 데이터에서 추가 필터링
5️⃣ SELECT → 필요한 컬럼 선택
6️⃣ ORDER BY → 정렬 수행
7️⃣ LIMIT → 결과 개수 제한 (옵션)
SELECT PRODUCT_ID, SUM(SALES_AMOUNT)
FROM ONLINE_SALE
WHERE SALES_DATE >= '2022-03-01'
GROUP BY PRODUCT_ID
HAVING SUM(SALES_AMOUNT) > 100
ORDER BY SUM(SALES_AMOUNT) DESC
LIMIT 5;
👉 실행 순서:
1️⃣ FROM ONLINE_SALE → ONLINE_SALE 테이블에서 데이터 가져오기
2️⃣ WHERE SALES_DATE >= '2022-03-01' → 2022년 3월 이후 데이터 필터링
3️⃣ GROUP BY PRODUCT_ID → 같은 PRODUCT_ID끼리 그룹화
4️⃣ HAVING SUM(SALES_AMOUNT) > 100 → 판매량 합계가 100 이상인 그룹만 남김
5️⃣ SELECT PRODUCT_ID, SUM(SALES_AMOUNT) → 최종 컬럼 선택
6️⃣ ORDER BY SUM(SALES_AMOUNT) DESC → 판매량 많은 순서로 정렬
7️⃣ LIMIT 5 → 상위 5개만 출력
UNION은 두 개 이상의 SELECT 결과를 합치는 연산
따라서, 각 SELECT가 개별적으로 먼저 실행된 후, UNION이 적용됨.
🔹 실행 순서
1️⃣ 첫 번째 SELECT 실행
2️⃣ 두 번째 SELECT 실행
3️⃣ 두 개의 결과를 합침 (UNION 적용)
4️⃣ 정렬이 있다면 ORDER BY 실행
SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE YEAR(SALES_DATE) = 2022 AND MONTH(SALES_DATE) = 3
UNION ALL
SELECT SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE YEAR(SALES_DATE) = 2022 AND MONTH(SALES_DATE) = 3
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;

✅ SELECT는 단독 실행 시 위 순서대로 진행됨!
✅ UNION을 사용하면 각 SELECT가 먼저 실행되고, 그 후에 결과가 합쳐짐!