MySQL에서는 서로 다른 두 개 이상의 테이블 데이터를 UNION으로 결합한 뒤, IN 절을 사용해 특정 조건에 맞는 레코드만 한 번의 쿼리로 조회할 수 있습니다. 이번 글에서는 예제 테이블 두 개를 만들고, UNION과 IN 절을 함께 사용하는 방법을 단계별로 살펴보겠습니다.
1. 첫 번째 테이블 생성하기
먼저 학생 정보를 저장할 첫 번째 테이블을 생성합니다.
mysql> create table DemoTable1
-> (
-> StudentId int,
-> StudentName varchar(20)
-> );
Query OK, 0 rows affected (1.24 sec)
INSERT 명령어를 사용해 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable1 values(210,'Adam');
Query OK, 1 row affected (0.11 sec)
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select * from DemoTable1;
실행 결과는 다음과 같습니다.
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 210 | Adam |
+-----------+-------------+
1 row in set (0.00 sec)
2. 두 번째 테이블 생성하기
같은 구조를 가진 두 번째 테이블을 생성합니다.
mysql> create table DemoTable2
-> (
-> StudentId int,
-> StudentName varchar(20)
-> );
Query OK, 0 rows affected (0.69 sec)
두 번째 테이블에도 레코드를 삽입합니다.
mysql> insert into DemoTable2 values(100,'Chris');
Query OK, 1 row affected (0.30 sec)
SELECT 문으로 두 번째 테이블의 모든 레코드를 확인합니다.
mysql> select * from DemoTable2;
실행 결과는 다음과 같습니다.
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 100 | Chris |
+-----------+-------------+
1 row in set (0.00 sec)
3. UNION SELECT와 IN 절 조합하기
이제 핵심 부분입니다. 두 테이블을 UNION으로 결합한 서브쿼리를 만들고, 외부 쿼리에서 IN 절로 원하는 StudentId 값(210, 100)을 지정하여 해당하는 학생 이름만 조회할 수 있습니다.
mysql> select StudentName from
-> (
-> select StudentId,StudentName from DemoTable1
-> UNION
-> select StudentId,StudentName from DemoTable2
-> ) tbl
-> where StudentId IN(210,100);
실행 결과는 다음과 같습니다.
+-------------+
| StudentName |
+-------------+
| Adam |
| Chris |
+-------------+
2 rows in set (0.00 sec)
정리
위 예제처럼 UNION으로 여러 테이블의 결과를 하나로 합친 후, IN 절을 활용하면 별도의 JOIN 없이도 원하는 조건의 데이터를 단일 쿼리로 간편하게 조회할 수 있습니다. 참고로 UNION은 중복된 행을 자동으로 제거하며, 중복을 허용하고 싶다면 UNION ALL을 사용하면 됩니다. 또한 UNION으로 결합되는 각 SELECT 문은 컬럼의 개수와 순서가 동일해야 하며, 데이터 타입도 호환되어야 한다는 점을 기억하세요.