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

MySQL에서 UNION SELECT와 IN 절을 하나의 쿼리로 조합하는 방법

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 문은 컬럼의 개수와 순서가 동일해야 하며, 데이터 타입도 호환되어야 한다는 점을 기억하세요.