MySQL의 UNION 연산자는 두 개 이상의 결과 집합을 하나로 합칠 수 있는 강력한 도구입니다. 이를 활용하면 여러 테이블에 나누어져 있는 데이터를 하나의 뷰(View)로 손쉽게 통합할 수 있습니다. 이번 글에서는 다음과 같은 데이터를 가진 두 개의 기본 테이블 Student_info와 Student_detail을 예시로 사용하겠습니다.
mysql> Select * from Student_info; +------+---------+------------+------------+ | id | Name | Address | Subject | +------+---------+------------+------------+ | 101 | YashPal | Amritsar | History | | 105 | Gaurav | Chandigarh | Literature | | 125 | Raman | Shimla | Computers | | 130 | Ram | Jhansi | Computers | | 132 | Shyam | Chandigarh | Economics | | 133 | Mohan | Delhi | Computers | +------+---------+------------+------------+ 6 rows in set (0.00 sec) mysql> Select * from Student_detail; +-----------+-------------+------------+ | Studentid | StudentName | address | +-----------+-------------+------------+ | 100 | Gaurav | Delhi | | 101 | Raman | Shimla | | 103 | Rahul | Jaipur | | 104 | Ram | Chandigarh | | 105 | Mohan | Chandigarh | +-----------+-------------+------------+ 5 rows in set (0.00 sec)
UNION으로 뷰 생성하기
아래 쿼리는 앞서 소개한 두 테이블의 데이터를 모두 사용하여 하나의 뷰를 생성합니다.
mysql> Create or Replace View Info AS Select StudentName from Student_detail UNION Select Name From Student_info; Query OK, 0 rows affected (0.10 sec) mysql> select * from info; +-------------+ | StudentName | +-------------+ | Gaurav | | Raman | | Rahul | | Ram | | Mohan | | YashPal | | Shyam | +-------------+ 7 rows in set (0.00 sec)
위 결과 집합은 두 테이블의 이름 컬럼 값을 모두 합친 것입니다. 주목할 점은 UNION이 자동으로 중복 값을 제거한다는 것입니다. 예를 들어 'Gaurav', 'Raman', 'Ram', 'Mohan'처럼 두 테이블에 모두 존재하는 이름은 한 번만 표시됩니다.
UNION ALL로 중복 값까지 모두 조회하기
반면 중복된 값까지 포함하여 모든 행을 그대로 저장하고 싶다면 UNION ALL을 사용하면 됩니다. 아래 쿼리를 살펴보겠습니다.
mysql> Create or Replace View Info AS Select StudentName from Student_detail UNION ALL Select Name From Student_info; Query OK, 0 rows affected (0.16 sec) mysql> select * from info; +-------------+ | StudentName | +-------------+ | Gaurav | | Raman | | Rahul | | Ram | | Mohan | | YashPal | | Gaurav | | Raman | | Ram | | Shyam | | Mohan | +-------------+ 11 rows in set (0.00 sec)
결과가 7개에서 11개로 늘어난 것을 확인할 수 있습니다. UNION ALL은 중복 검사를 수행하지 않으므로 두 테이블의 모든 행이 그대로 반환되며, 대용량 데이터를 처리할 때는 중복 제거 과정이 생략되어 UNION보다 성능상 유리한 경우도 많습니다.
정리
- UNION: 두 테이블의 결과를 결합하면서 중복 값을 자동으로 제거합니다.
- UNION ALL: 중복 값을 제거하지 않고 모든 행을 그대로 반환합니다.
- 두 경우 모두
CREATE OR REPLACE VIEW구문과 함께 사용하면 여러 테이블의 데이터를 담은 뷰를 간편하게 만들 수 있습니다.