[sql] Union과 Union All

김주경·2020년 12월 7일
0

Union이란 무엇인가?

union은 두 개 이상의 쿼리를 합쳐 하나의 쿼리로 만들어 주는 역할을 한다.
이 때 각 컬럼명은 같아야하며 데이터타입 역시 동일해야한다.
만일 컬럼명이 다른 경우엔 AS 를 사용해 컬럼명을 통일시켜주어야 한다.

예제)
SELECT EXAMPLE_1 FROM EX_TABLE1
UNION
SELECT EXAMPLE_2 AS EXAMPLE_1 FROM EX_TABLE2

Union VS Union All

우선 기본적으로 Union은 Union Distinct를 줄여서 쓰는 개념이다.
즉, 중복을 허락하지 않는다.
예를 들어 EX_TABLE1 에서 select 한 값이 'test1', 'test2' 이고
EX_TABLE2에서 select 한 값이 'test1', 'test3'이라고 가정해보자.

이때 union을 써서 두 sql을 합쳐주면 결과는 'test1', 'test2', 'test3'으로
중복을 제거한 결과값을 돌려준다.

하지만 Union all을 사용해 두 sql을 합친다면 결과는
'test1', 'test2', 'test1', 'test3' 가 될 것이다.

아무래도 Union의 경우 중복을 제거하는 작업을 시행해주기 때문에 Union all 에 비해 처리 속도가 느리다.
그렇기 때문에 중복되어도 크게 이상이 없는 경우에는 되도록 Union all 을 사용해주는 것이 좋다.

마치며

union과 union all을 사용하는 쿼리문은 사실 좋은 쿼리문이 아니다.
각 테이블에 중복되는 값이 있다는 방증이기도 하다. 피치못하게 사용하는 경우가 아니라면 테이블을 수정하는 것이 바람직하다.

+) 추가로 Oracle에서 union을 쿼리를 썼을 때 order by가 제대로 수행되지 않았었다.
이때는 아래와 같은 방법으로 시도해 보자.

SELECT * FROM(
	SELECT EXAMPLE_1
    	FROM EX_TABLE1
		UNION 
	SELECT EXAMPLE_2 AS EXAMPLE_1
	FROM EX_TABLE2
    )
ORDER BY EX_TABLE ASC;
profile
안냐세온

0개의 댓글