UNION 은 JOIN 과 다르게 수직으로 두 테이블을 붙여 하나의 집합으로 만드는 기술이다.

JOIN은 두 테이블을 수평으로 연결해 더 많은 정보를 보여주지만, UNION은 수직으로 붙여서 더 많은 데이터를 보여주게 된다.

만약 현재 판매중인 상품을 저장하는 products 테이블과 판매중지된 상품이 저장된 stop_selling_products 가 있을 때, 두 테이블을 합쳐서 현재까지 저장되었던 모든 상품을 보려 할 때 아래와 같이 UNION을 쓸 수 있다.

SELECT product_id, name
FROM products
UNION
SELECT product_id, name
FROM stop_selling_products;
-- 첫번째 SELECT 쿼리의 결과와 두번째 SELECT 쿼리의 결과를 UNION으로 합쳤다.
-- UNION 은 합쳐진 결과에서 완전히(모든 컬럼이) 중복되는 행이 있다면 중복을 제거한다.
-- 만약 첫번째 쿼리의 결과가 (1, a), (2, b) 이고, 두번째는 (3, c), (2, b) 라면
-- 최종 결과는 (1, a), (2, b), (3, c) 가 된다.

주의사항

UNION ALL

SELECT product_id, name
FROM products
UNION ALL
SELECT product_id, name
FROM stop_selling_products;
-- 이렇게 UNION ALL 을 쓴다면 두 테이블에 중복되는 데이터가 있어도 따로 제거하지 않는다.

UNION VS UNION ALL

추가 팁