[MySQL] DB 테이블 연산자 - UNION (두 개 이상 테이블 합치기)

리눅스/MySQL|2015. 1. 16. 11:39
반응형

UNION(유니온)
 - 두 개 이상의 테이블을 묶어서 반환한다.
 - Select의 열 리스트를 바탕으로 두 개 이상 쿼리의 결과를 하나의 테이블로 합친다.
 - 유니온의 결과를 각 Select의 값들이 "겹쳐진" 결과라고 생각하면 된다.

 

Select title From table1 
Union
Select title From table2 
Union
Select title From table3;

 

위 쿼리를 사용하면 하나의 테이블로 반환된다.

 
유니온 사용시 주의사항

 - 각 Select문의 열 수는 같아야한다. 첫번째 문장에서는 두 열을 선택하고 두번째에서는 하나의 열을 선택할 수 없다.
 - 각 Select문에 표현식과 집계 함수도 같아야 한다.
 - Select문의 순서는 중요하지 않다. 순서는 결과에 영향을 미치지 않는다.
 - 유니온의 결과에서 중복값은 하나로 나오는 것이 기본 설정이다.
 - 열의 데이터 타입은 같거나 서로 변환 가능한 값이어야 한다.
 - 특별한 이유가 있어 중복값을 보고 싶으면 UNION ALL을 사용할 수 있다. 
 - Order By의 경우 유니온의 맨 끝에 하나만 받을 수 있다.

 

 

* 각 Select에서는 같은 수의 열을 사용해야 한다.

 

Select title From table1 
Union
Select title From table2 
Union
Select title From table3 
Order By title;         -- 합쳐진 전체 테이블에 정렬을 적용한다.

 

예) Union으로 테이블 만들기

Create Table my_union AS
Select title From table1 Union 
Select title From table2 Union
Select title From table3;

 

 
* 참고 (아래 두 개의 연산자는 MySQL에서 지원하지 않는다.)
   - INTERSECT : 첫번째 쿼리와 두번째 쿼리 모두에 있는 열들을 반환한다. (교집합)

  

Select title From table1 
Intersect
Select title From table2;

 
   - EXCEPT : 첫번째 쿼리에는 있지만 두번째 쿼리에는 없는 열들을 반환한다.
                     table1에서 table2와의 교집합을 제거한 나머지 table1 부분을 반환한다.

 

Select title From table1 
Except
Select title From table2;

 

[출처] Powerful Programming | 음주코딩 (http://warmz.tistory.com/278)

반응형

댓글()