확인해보니 이전에 설정한 형식과 일부 차이가 있었던 것 같습니다. 다시 원래 형식에 맞춰 작성해 드리겠습니다.
- 핵심 원리
UNION ALL
연산자는 여러 개의 쿼리 결과를 하나로 결합하여 출력하는 기능을 제공합니다. 이 연산자는 중복된 데이터를 제거하지 않고 모든 결과를 그대로 출력합니다. - 실무에서 쓰이는 이유
UNION ALL
은 중복된 데이터를 유지하면서 여러 테이블이나 쿼리의 결과를 결합해야 하는 상황에서 사용됩니다. 이 연산자는 데이터를 합치는 데 걸리는 시간을 최소화하며, 불필요한 중복 제거 과정을 거치지 않기 때문에 성능이 뛰어납니다. - 실무에서 구체적으로 사용되는 상황 예측
- 월별 매출 데이터를 결합하여 연간 매출을 계산할 때
- 여러 지역에서 발생한 매출 데이터를 결합하여 전체 매출을 분석할 때
- 제품별 판매 데이터를 결합하여 총 판매량을 계산할 때
- 자주 사용되는 윈도우 표시 및 설명
SQL에서UNION ALL
을 사용할 때 자주 사용하는 윈도우 함수는 없지만, 일반적으로ROW_NUMBER
,RANK
,DENSE_RANK
와 같은 윈도우 함수를 조합하여 데이터의 순서를 지정하거나 그룹 내 순위를 매길 수 있습니다. 예를 들어, 두 테이블에서 데이터를 결합한 후 순위를 매기는 경우는 다음과 같습니다:
SELECT col1, ROW_NUMBER() OVER (ORDER BY col1) AS row_num
FROM (
SELECT col1 FROM table1
UNION ALL
SELECT col1 FROM table2
) combined;
- 연습 문제
부서 번호와 부서 번호별 토탈 월급을 출력하는 SQL 쿼리를 작성해보세요. 단, 전체 토탈 월급도 함께 출력되어야 합니다. - 연습 문제 해답 및 테이블 표시
SELECT deptno, sum(sal)
FROM emp
GROUP BY deptno
UNION ALL
SELECT TO_NUMBER(null) as deptno, sum(sal)
FROM emp;
결과 테이블:
DEPTNO | SUM(SAL) |
---|---|
30 | 9400 |
10 | 8750 |
20 | 10875 |
NULL | 29025 |
- 응용 문제
두 개의 테이블 A와 B를 생성하고, 각각의 테이블에서 중복되지 않는 데이터를 포함한 모든 데이터를UNION ALL
을 사용해 출력하는 SQL 쿼리를 작성하세요. - 응용 문제 해답 및 테이블 표시
CREATE TABLE A (COL1 NUMBER(10));
INSERT INTO A VALUES(1);
INSERT INTO A VALUES(2);
INSERT INTO A VALUES(3);
INSERT INTO A VALUES(4);
INSERT INTO A VALUES(5);
CREATE TABLE B (COL1 NUMBER(10));
INSERT INTO B VALUES(3);
INSERT INTO B VALUES(4);
INSERT INTO B VALUES(5);
INSERT INTO B VALUES(6);
INSERT INTO B VALUES(7);
SELECT COL1 FROM A
UNION ALL
SELECT COL1 FROM B;
결과 테이블:
COL1 |
---|
1 |
2 |
3 |
4 |
5 |
3 |
4 |
5 |
6 |
7 |
- 전자상거래 업계에서 쓰일 수 있는 경우 예측
- 고객 주문 데이터를 결합하여 전체 매출을 계산할 때
- 여러 창고에서 출하된 제품 데이터를 결합하여 총 재고를 계산할 때
- 전자상거래 업계에서 사용할 수 있는 경우 예상 상황 문제 2가지 및 그 경우에 대한 SQL 코드 작성
- 상황 1: 각 창고에서 출하된 제품 데이터를 결합하여 총 출하량을 계산
- 상황 2: 여러 채널에서 발생한 주문 데이터를 결합하여 총 매출을 계산 상황 1 SQL 코드:
SELECT product_id, sum(quantity) as total_shipped
FROM warehouse1
GROUP BY product_id
UNION ALL
SELECT product_id, sum(quantity) as total_shipped
FROM warehouse2
GROUP BY product_id;
상황 2 SQL 코드:
SELECT order_id, sum(amount) as total_sales
FROM online_orders
GROUP BY order_id
UNION ALL
SELECT order_id, sum(amount) as total_sales
FROM in_store_orders
GROUP BY order_id;
- 10번에 대한 SQL 코드를 시각적으로 이해하기 쉽도록 테이블 예시 작성
상황 1: PRODUCT_ID TOTAL_SHIPPED 101 500 102 300 103 700 상황 2: ORDER_ID TOTAL_SALES 201 1500 202 3000 203 4500