MySQL에서 여러 테이블의 데이터를 UNION으로 합쳐 조회할 때, 각 행이 어느 테이블에서 왔는지 구분하고 싶은 경우가 있습니다. 이럴 때 AS 명령어를 사용하면 테이블 이름을 하나의 컬럼처럼 함께 출력할 수 있습니다.
1. 첫 번째 테이블 생성하기
먼저 예제에 사용할 첫 번째 테이블을 생성합니다.
mysql> create table DemoTable
(
Name varchar(20)
);
Query OK, 0 rows affected (0.56 sec)
레코드 삽입 및 확인
INSERT 문으로 데이터를 추가한 뒤, SELECT 문으로 전체 레코드를 확인해 보겠습니다.
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.18 sec)mysql> select * from DemoTable;
실행 결과는 다음과 같습니다.
+------+
| Name |
+------+
| John |
+------+
1 row in set (0.00 sec)
2. 두 번째 테이블 생성하기
같은 방식으로 두 번째 테이블을 생성하고 데이터를 삽입합니다.
mysql> create table DemoTable2
(
Name varchar(20)
);
Query OK, 0 rows affected (0.59 sec)
mysql> insert into DemoTable2 values('Bob');
Query OK, 1 row affected (0.20 sec)mysql> select * from DemoTable2;
실행 결과는 다음과 같습니다.
+------+
| Name |
+------+
| Bob |
+------+
1 row in set (0.00 sec)
3. UNION 쿼리에서 테이블 이름을 컬럼으로 출력하기
핵심은 각 SELECT 절에서 문자열 리터럴로 테이블 이름을 지정하고, AS를 사용해 별칭(alias)을 붙여주는 것입니다. 이렇게 하면 해당 문자열이 마치 컬럼 값인 것처럼 결과에 포함됩니다.
mysql> select 'DemoTable' as TableName, Name from DemoTable
union
select 'DemoTable2' as TableName, Name from DemoTable2;
실행 결과는 다음과 같습니다.
+--------------+------+
| TableName | Name |
+--------------+------+
| DemoTable | John |
| DemoTable2 | Bob |
+--------------+------+
2 rows in set (0.00 sec)
정리
UNION으로 합쳐진 결과에서 각 행의 출처를 알 수 있도록, 각 SELECT 문에 테이블 이름을 나타내는 문자열 리터럴을 추가하고 AS로 동일한 컬럼 별칭을 지정하면 됩니다. 참고로 UNION의 모든 SELECT 절은 같은 개수와 순서의 컬럼을 가져야 하므로, 별칭은 반드시 일치시켜 주어야 합니다. 만약 중복 제거 없이 모든 행을 그대로 유지하고 싶다면 UNION ALL을 사용하는 것이 좋습니다.