가끔 유니온 연산(TABLE_A UNION TABLE_B)시 교집합 부분을 제거하고 추가한다는 의미를, TABLE_B를 추가할 때 추가되는 부분(TABLE_B)내에서 교집합 부분을 제외한 부분만 추가한다는 의미로 알고 있는 사람이 있어서 포스팅을 작성해본다.

Union의 정확한 의미는 아래 그림과 같이, TABLE_A 에서 교집합 부분을 제거하고 테이블_B를 추가하는 것이다.

테이블 A
insert into TAB1 values (10, 'A1');
insert into TAB1 values (20, 'A2');
테이블 B
insert into TAB2 values (10, 'A1');
insert into TAB2 values (20, 'A2');
insert into TAB2 values (30, 'A3');
insert into TAB2 values (40, 'A4');
위와 같은 테이블에서 아래와 같이 쿼리를 날렸다.
select COL1, COL2 ,count(*) AS CNT
from (select COL1, COL2 from TAB1
union all
select COL1, COL2 사원명 from TAB2
union
select COL1, COL2 from TAB1)
그리고 아래와 같은 결과를 출력하였다.

왜 위와같은 결과를 추출하였을까? TABLE_B를 추가할 때 추가되는 부분(TABLE_B)내에서 교집합 부분을 제외한 부분만 추가한다는 의미로 알고 있는 사람은 지금부터 지식을 수정해보자.
select COL1, COL2 ,count(*) AS CNT
from (select COL1, COL2 from TAB1
union all
select COL1, COL2 사원명 from TAB2)
일단 위 쿼리를 실행하면 다음과 같은 결과를 가져온다.

하지만 아래와 같이 union TABL1을 추가 하게되면 단순히 중복된 부분인 TABL1 추가가 실패하는게 아니라, 앞테이블(TABL1 union all Table2)에서 중복된 부분을 삭제하고, 그 후에 뒷 테이블(TAB1)을 추가하는 연산을 하게된다.
select COL1, COL2
from (select COL1, COL2 from TAB1
union all
select COL1, COL2 사원명 from TAB2
union
select COL1, COL2 from TAB1)

그러므로 위와같이 결과가 나오게된다.