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

MySQL에서 조건을 적용해 두 테이블 연결하기 - UNION ALL 활용법

MySQL에서 두 개의 테이블을 하나로 합쳐서 조회하려면 UNION ALL 구문을 사용하면 됩니다. UNION ALL은 각 테이블의 결과를 조건에 맞게 필터링한 후 그대로 이어 붙여주는 역할을 합니다.

이번 글에서는 실제 예제를 통해 두 테이블을 생성하고, 특정 조건(Id = 20)을 적용하여 두 테이블의 데이터를 연결하는 방법을 단계별로 살펴보겠습니다.

1. 첫 번째 테이블 생성

먼저 DemoTable1이라는 테이블을 만들어 보겠습니다. 테이블은 Id와 FirstName 두 개의 컬럼으로 구성됩니다.

mysql> create table DemoTable1
    (
    Id int,
    FirstName varchar(20)
    );
Query OK, 0 rows affected (1.52 sec)

데이터 삽입

INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.

mysql> insert into DemoTable1 values(10,'John');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable1 values(20,'Carol');
Query OK, 1 row affected (0.28 sec)

데이터 확인

SELECT 문으로 저장된 모든 레코드를 조회합니다.

mysql> select *from DemoTable1;

출력 결과

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 10   | John      |
| 20   | Carol     |
+------+-----------+
2 rows in set (0.00 sec)

2. 두 번째 테이블 생성

이번에는 동일한 구조를 가진 DemoTable2 테이블을 생성합니다.

mysql> create table DemoTable2
   (
   Id int,
   FirstName varchar(20)
   );
Query OK, 0 rows affected (1.22 sec)

데이터 삽입

mysql> insert into DemoTable2 values(20,'David');
Query OK, 1 row affected (1.28 sec)
mysql> insert into DemoTable2 values(40,'Chris');
Query OK, 1 row affected (0.38 sec)

데이터 확인

mysql> select *from DemoTable2;

출력 결과

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 20   | David     |
| 40   | Chris     |
+------+-----------+
2 rows in set (0.00 sec)

3. UNION ALL로 두 테이블 연결하기

이제 핵심 단계입니다. 아래 쿼리는 WHERE 절로 조건(Id = 20)을 지정하고, UNION ALL을 사용해 두 테이블의 결과를 하나로 합칩니다.

mysql> select *from DemoTable1 where Id=20
   union all select *from DemoTable2 where Id=20;

출력 결과

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 20   | Carol     |
| 20   | David     |
+------+-----------+
2 rows in set (0.43 sec)

결과 분석 및 참고 사항

출력 결과를 보면 DemoTable1의 'Carol'과 DemoTable2의 'David'가 모두 조회되었습니다. 두 레코드 모두 Id 값이 20이기 때문입니다.

여기서 중요한 점은 UNION ALL과 UNION의 차이입니다. UNION ALL은 중복 여부와 상관없이 모든 행을 그대로 반환하지만, UNION은 중복된 행을 자동으로 제거합니다. 따라서 성능이 중요하거나 중복 제거가 필요 없는 경우에는 UNION ALL을 사용하는 것이 좋습니다.

또한 UNION ALL을 사용할 때는 두 SELECT 문이 반환하는 컬럼의 수와 데이터 타입이 서로 일치해야 한다는 점도 기억해두시기 바랍니다.