제수기 > SQL > DML/DQL > Set Operator

Eunbi Jo·2024년 12월 26일
0

제수기

목록 보기
14/90
'제수기' - '제발 수업내용을 기억해라'

SET OPERATOR

# 여러 개의 질의결과(result set)를 컬럼끼리 연결하여 하나의 결과집합(relation)을 만드는 방식
# join은 행끼리 연결했었음.

# 조건
-- SELECT 절의 "컬럼 수가 동일" 해야 한다.
-- ORDER BY 절은 마지막 결과집합에 딱 한번 사용가능하다.
-- 컬럼명이 다른 경우, 첫번째 entity의 컬럼명을 결과집합에 반영한다.
-- SELECT 절의 동일 위치에 타입이 다른 경우, 해당 컬럼은 오류없이 문자열 컬럼으로 변환처리된다.


# 종류
-- 1. UNION 합집합 (중복제거)
-- 2. UNION ALL 합집합
-- 3. INTERSECT 교집합 (MySQL 지원 안함)
-- 4. MINUS 차집합 (MySQL 지원 안함)

Union all / Union

-- union all : 위/아래 테이블 연결
-- union : 위/아래 테이블 연결, 중복된 행을 제거함     
  • union allunion보다 더 빠른 연산을 한다. 중복된 걸 제거하지 않고 그냥 가져다가 붙이는 거니까.

판매 데이터 활용 사례

  • 가상 테이블 생성
  • 실습문제: 2달전 판매데이터를 조회
    -- 2024-10 하드코딩할 수 없고, 언제 실행해도 2달 전 데이터만 나올 수 있게 sql 작성
  • extract(year_month)를 활용한다.

RDB도 처리할 수 있는 데이터 규모에 한계가 있기 때문에, 판매량 데이터를 월별로 나눠놨다가 합칠 때만 union을 써서 쓰는 경우가 많다.

월별 판매데이터 테이블 생성 및 데이터 분리(migration)

  • 처리 순서
1. 2달 전, 1달 전 데이터 복사붙여넣기 해놓고
2. 삭제해서 이번달 데이터만 있는 테이블을 만든다.
  1. create table ~ as ~ 를 활용해서 2달 전, 1달 전, 이번달 데이터를 분리한다.

  2. delete 로 이번달 데이터를 제외한 나머지 월별 데이터를 삭제한다.

3개의 테이블이 똑같은 구조로 구분된 걸 확인할 수 있다.

  1. 그럼 이 상황에서 3달치 데이터를 다 달라는 요청이 온다면 어떻게 할까?
    -- 중복 데이터가 없으므로 union all을 사용해서 3달치 데이터를 합쳐주면 된다.

0개의 댓글