MySQL
MySQL Union
weicome
2016. 12. 5. 20:21
MySQL - UNION
MySQL 과 같은 RDBMS에서 사용하는 Union 연산자는 여러 테이블에 존재하는 같은 성격의 값을 한번의 쿼리로 추출할 수 있도록 돕는다.
Member 테이블에 회원 이메일이 있고, Newsletter 테이블에 구독자 이메일이 있는데, 모든 이메일로 메일을 보내고자 할 경우 두 번의 쿼리와 병합 프로그램을 만들어야 할 것이다. 이럴 때 union 연산자를 사용해 한번의 쿼리로 간단하게 정보를 추출할 수 있다.
Union을 사용할 때 주의할 점
- 대응하는 필드의 이름이 같아야 한다. 같지 않다면 AS를 사용하여 같게 만든다.
- 대응되는 각 필드의 타입이 같아야 한다.
예제 테이블 정보
위의 두 테이블에서 이메일을 추출해야 할 경우 union을 사용하면 간단하다.
중복되지 않은 유일한 정보 추출하는 경우
(SELECT u_name, u_email FROM Member WHERE SEQ < 10 )
UNION
( SELECT letter_name AS u_name, letter_email AS u_email FROM Newletter WHERE letter_seq < 10 )
중복되더라도 모든 값을 추출하는 경우
(SELECT u_name, u_email FROM Member WHERE SEQ < 10 )
UNION ALL
( SELECT letter_name AS u_name, letter_email AS u_email FROM Newletter WHERE letter_seq < 10 )
Union을 하면 결과가 테이블에 종속되지 않기 때문에 정렬이 필요하다. 정렬을 위해서는 쿼리의 끝에 정렬을 추가한다.
(SELECT u_name, u_email FROM Member WHERE SEQ < 10 )
UNION
( SELECT letter_name AS u_name, letter_email AS u_email FROM Newletter WHERE letter_seq < 10 ) ORDER BY u_email