[출처] SQL에서 UNION과 UNION ALL의 차이|작성자 나쁜남자
아래와 같은 두 개의 테이블이 있다고 가정합니다.
TABLE_A TABLE_B
----------------- -----------------
FLD1 FLD1
----------------- -----------------
1 5
2 3
3 1
----------------- -----------------
이 때...
SELECT FLD1 FROM TABLE_A
UNION ALL
SELECT FLD1 FROM TABLE_B
하면 결과는
-----------------
FLD1
-----------------
1
2
3
5
3
1
-----------------
이 됩니다. 두 쿼리의 결과를 단순히 합친 것이죠.
그런데
SELECT FLD1 FROM TABLE_A
UNION
SELECT FLD1 FROM TABLE_B
하면 결과는
-----------------
FLD1
-----------------
1
2
3
5
-----------------
이 됩니다. 두 테이블의 결과를 합치되, 중복된 값을 제외하죠.
이렇게 중복을 제거하기 위해 불가피하게 '소트'를 하게 됩니다.
따라서 자료가 많거나 Index가 되어 있지 않은 필드를 대상으로 하게 되면
쿼리 시간이 길어질 수 있습니다.
* 결론
union은 distinct와 같은 역할을 하기 때문에,
union all 보다 처리 속도가 느립니다.
되도록이면 union all 을 사용하세요.
☞━━━ outer 조인 & union all ━━━
UNION ALL
UNION 사용할 때는 상/하 질의 결과 coulmn 갯수가 같아야 한다.
우선 OUTER JOIN은 무엇을 하는지 간단히 설명을 하자면, 조건이 안맞는 것도 결합을 시키는 겁니다.
OUTER JOIN을 하면 주체가 되는 쪽의 데이터는 무조건 다 나온다는게 원칙입니다.
그리고 UNION은 데이터를 상 하로 결합을 하는 겁니다.
조인을 하게 되면 다른 테이블의 데이터는 옆으로 와서 붙습니다.
하지만 UNION을 하게 되면 다른 테이블의 결과는 밑으로 와서 붙게 됩니다.
물론 밑으로 데이터가 붙기 위한 몇가지 제약이 있습니다.