Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 여러 테이블의 데이터를 결합해 뷰(View) 생성하는 방법 – UNION 연산자 활용하기

MySQL의 UNION 연산자는 두 개 이상의 결과 집합을 하나로 합칠 수 있는 강력한 도구입니다. 이를 활용하면 여러 테이블에 나누어져 있는 데이터를 하나의 뷰(View)로 손쉽게 통합할 수 있습니다. 이번 글에서는 다음과 같은 데이터를 가진 두 개의 기본 테이블 Student_infoStudent_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 구문과 함께 사용하면 여러 테이블의 데이터를 담은 뷰를 간편하게 만들 수 있습니다.