2010년 5월 20일

두개의 쿼리 결과를 합친다 - UNION

UNION을 사용하는 필요성을 느끼는 경우라면 크게 두가지가 있다.

1. 하나의 테이블에서 서로 조건이 다른 쿼리를 실행하고 가져온 데이터를 합할 때 이 경우는 OR연산자를 사용하여 한 개의 SELECT 문으로 만들 수 있으나 SQL쿼리의 최적화를 위하여 분리하는 경우가 있다.

2. 다른 테이블에서 가져온 데이터를 한 개의 쿼리 결과로서 가져오기 원할 때 이렇듯 UNION은 서로 다른 쿼리의 결과를 합치는 합집합의 의미를 가지고 있다.

실제로 UNION을 사용해서 쿼리를 실행하면 정말.. 쉽게 만들 수 있다.

UNION의 구조
select a, b, c from table1 UNION select d, e, f from table2

UNION 사용시 유의사항
1. 모든 select_list는 칼럼의 수가 같아야 하고 자료형도 호환이 되여야 하며 같은 순서이어야 한다.
2. 컬럼 이름은 첫번째 SELECT 문을 따른다.
3. ORDER BY절은 보통 마지막 SQL문에 한꺼번에 쓰고 그 결과는 전체 결과에 적용된다.

Tip. UNION ALL
UNION은 기본적으로 중복된 데이터에 대해서는 기본적으로 검사하여 하나의 ROW만 출력한다.

ex> select 'A', 'B' UNION select 'A', 'B'
--------- ------
A B
(1개 행 적용됨)

편리하긴 하지만 때에 따라 의도하지 않는다면 UNION ALL을 사용하면 된다.

select 'A', 'B' UNION ALL select 'A', 'B'
--------- ------
A B
A B
(2개 행 적용됨)

UNION ALL은 중복체크를 하지 않기 때문에 실행하는 속도도 빠르다.

댓글 없음:

댓글 쓰기