두 개 이상 SELECT 결과 결합 시 중복 제거를 수행
SELECT name
FROM employees -- 'LEE', 'KIM', 'PARK
UNION
SELECT name
FROM managers; -- 'CHOI', 'YANG', 'KIM'
-- 결과 : 'LEE', 'KIM', 'PARK', 'CHOI', 'YANG'
DISTINCT 처리가 들어가 UNION ALL 보다는 느림두 개 이상 SELECT 결과 결합 시 나오는 행 전부 합침
SELECT name
FROM employees -- 'LEE', 'KIM', 'PARK
UNION ALL
SELECT name
FROM managers; -- 'CHOI', 'YANG', 'KIM'
-- 결과 : 'LEE', 'KIM', 'PARK', 'CHOI', 'YANG', 'KIM'
아래 UNION은
SELECT name
FROM employees -- 'LEE', 'KIM', 'PARK
UNION
SELECT name
FROM managers; -- 'CHOI', 'YANG', 'KIM'
-- 결과 : 'LEE', 'KIM', 'PARK', 'CHOI', 'YANG'
UNION ALL과 DISTINCT로 다음과 같이 구현할 수 있다.
SELECT DISTINCT name
FROM (
SELECT name FROM employees
UNION ALL
SELECT name FROM managers
) combined_names
-- 결과 : 'LEE', 'KIM', 'PARK', 'CHOI', 'YANG'
UNION
UNION ALL + DISTINCT
상황에 따르지만 대게 UNION이 메모리/속도 측면에서 더 유리하다.
개별 테이블 내 중복 데이터가 많다면 아래와 같은 쿼리 구성도 가능하다.
SELECT col_name FROM (SELECT DISTINCT col_name FROM table1) t1
UNION
SELECT col_name FROM (SELECT DISTINCT col_name FROM table2) t2
UNION
SELECT col_name FROM (SELECT DISTINCT col_name FROM table3) t3
UNION
SELECT col_name FROM (SELECT DISTINCT col_name FROM table4) t4;
단순히 UNION만 쓰지말고 다양한 생각과 테스트에 대한 고려가 필요💡