많은 경우 조인과 서브쿼리를 통해 복잡한 쿼리 연산을 수행할 수 있으나 쿼리만으로 두 테이블의 다른 항목들을 열거하는 작업은 UNION 을 사용하면 아주 간단해진다.


 다음과 같은 규칙만 만족한다면 N개의 다양한 테이블을 하나의 쿼리로 연결한 SELECT 결과를 받을 수 있다. UNION은 다음과 같이 사용가능하다.


* SELECT name from professor UNION select name from girl_group


 위의 쿼리에서 우리는 Professor 테이블의 존재하는 name 들과 girl_group 테이블 내에 존재하는 name 들을 얻을 수 있다. 교수들의 이름과 걸그룹의 이름을 같이 얻을 수 있겠다.(;;)


(1) UNION 내에서 쿼리들은 하나의 ORDER BY만 사용한다. UNION 으로 감싸는 쿼리들을 각각 정렬하는건 허용되지 않는다.


(2) 각 SELECT의 열수, 표현식이 같아야 한다.


(3) SELECT 문들끼리의 순서는 상관없다.


(4) 결과가 중복되면 DEFAULT 설정으로는 하나만 나온다.


(5) 열의 타입은 같거나 반환 가능한 형태여야 한다.


(6) 중복값을 나타내고 싶다면 UNION ALL을 사용한다.


 물론 UNION 내의 쿼리들을 각각 정리하는 편법은 존재한다. 바로 서브쿼리를 이용하면 가능한데 예를들어 다음과 같이 하면 된다.


SELECT * from (select name from professor order by reg_date)

UNION ...

SELECT * from (select name from girl_group order by reg_date)


위의 예시는 교수의 이름들을 등록 시간 별로 정렬해서 name 을 묶고, 걸그룹의 이름들을 등록 시간 별로 정렬해서 묶는 쿼리의 모습이다.

+ Recent posts