SQL UNION 연산자 사용법

  1. 핵심 원리
  • UNION 연산자는 여러 개의 쿼리 결과를 위아래로 결합하여 하나의 결과로 출력하는 방법입니다. UNION ALL과의 차이점은 중복된 데이터가 제거된다는 점입니다.
  1. 실무에서 쓰이는 이유
  • 실무에서 UNION은 여러 테이블에서 데이터를 가져와 결합하거나, 동일한 테이블 내에서 서로 다른 조건의 데이터를 하나로 합쳐야 할 때 자주 사용됩니다.
  1. 실무에서 구체적으로 사용되는 상황 예측
  • 예를 들어, 매출 데이터와 환불 데이터를 각각 조회한 후 이를 하나의 보고서로 결합할 때 UNION을 사용할 수 있습니다.
  • 또 다른 예시는, 직원 테이블에서 서로 다른 직급의 직원 데이터를 하나의 결과로 결합해 보고할 때 사용될 수 있습니다.
  1. 자주 사용되는 윈도우 표시 및 설명
  • ROW_NUMBER() OVER (PARTITION BY column ORDER BY column): 결과 집합의 각 행에 고유한 순번을 부여합니다. 주로 페이징 쿼리나 순위 매기기에서 사용됩니다.
  SELECT column, ROW_NUMBER() OVER (PARTITION BY column ORDER BY column) AS RowNum
  FROM table;
  • RANK() OVER (ORDER BY column): 동일한 값에 대해 동일한 순위를 부여하고, 순위 간의 격차가 발생할 수 있습니다.
  SELECT column, RANK() OVER (ORDER BY column) AS Rank
  FROM table;
  • DENSE_RANK() OVER (ORDER BY column): 동일한 값에 대해 동일한 순위를 부여하고, 순위 간의 격차가 발생하지 않습니다.
  SELECT column, DENSE_RANK() OVER (ORDER BY column) AS DenseRank
  FROM table;
  1. 연습 문제
  • 부서별로 직원들의 총 급여를 계산한 후, UNION을 사용하여 전체 총 급여를 함께 출력하는 SQL 쿼리를 작성하세요.
  1. 연습 문제 해답 및 테이블 표시
SELECT deptno, sum(sal)
FROM emp
GROUP BY deptno
UNION
SELECT null as deptno, sum(sal)
FROM emp;
DEPTNOSUM(SAL)
109400
208750
3010875
NULL29025
  1. 응용 문제
  • 특정 조건을 만족하는 직원의 데이터를 조회한 후, UNION을 사용하여 조건을 만족하지 않는 직원의 데이터와 결합하여 하나의 결과로 출력하는 쿼리를 작성하세요.
  1. 응용 문제 해답 및 테이블 표시
SELECT ename, job, sal
FROM emp
WHERE sal > 3000
UNION
SELECT ename, job, sal
FROM emp
WHERE sal <= 3000;
ENAMEJOBSAL
KINGPRESIDENT5000
FORDANALYST3000
SCOTTANALYST3000
  1. 전자상거래 업계에서 쓰일 수 있는 경우 예측
  • 제품 카테고리별 매출 데이터를 조회한 후, 전체 매출 데이터를 추가하여 총 매출 보고서를 생성할 때 UNION을 사용할 수 있습니다.
  • 특정 기간 동안의 신규 고객과 기존 고객의 매출 데이터를 각각 조회한 후, 이를 결합하여 전체 매출 보고서를 생성할 때도 사용될 수 있습니다.
  1. 전자상거래 업계에서 사용할 수 있는 경우 예상 상황 문제 2가지 및 그 경우에 대한 SQL 코드 작성
  • (1) 특정 카테고리에서 가장 많이 판매된 제품과 적게 판매된 제품을 조회한 후 이를 하나의 결과로 결합하는 쿼리
SELECT product_name, sales
FROM sales
WHERE category = 'Electronics' AND sales = (SELECT MAX(sales) FROM sales WHERE category = 'Electronics')
UNION
SELECT product_name, sales
FROM sales
WHERE category = 'Electronics' AND sales = (SELECT MIN(sales) FROM sales WHERE category = 'Electronics');
  • (2) 특정 기간 동안 신규 고객의 매출과 기존 고객의 매출을 각각 조회한 후, 이를 결합하여 전체 매출 보고서를 생성하는 쿼리
SELECT customer_type, SUM(sales)
FROM orders
WHERE customer_type = 'New'
GROUP BY customer_type
UNION
SELECT customer_type, SUM(sales)
FROM orders
WHERE customer_type = 'Existing'
GROUP BY customer_type;
  1. 10번에 대한 SQL 코드를 시각적으로 이해하기 쉽도록 테이블 예시 작성
PRODUCT_NAMESALES
Laptop5000
Mouse100
CUSTOMER_TYPESUM(SALES)
New15000
Existing25000
Posts created 411

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top