union은 두 개 이상의 쿼리를 합쳐 하나의 쿼리로 만들어 주는 역할을 한다.
이 때 각 컬럼명은 같아야하며 데이터타입 역시 동일해야한다.
만일 컬럼명이 다른 경우엔 AS 를 사용해 컬럼명을 통일시켜주어야 한다.
예제)
SELECT EXAMPLE_1 FROM EX_TABLE1
UNION
SELECT EXAMPLE_2 AS EXAMPLE_1 FROM EX_TABLE2
우선 기본적으로 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;