MySQL에서 두 개 이상의 열을 동시에 검색해 일치하는 행을 찾으려면 UNION 연산자를 활용할 수 있습니다. UNION은 여러 SELECT 문의 결과를 하나로 결합해 주기 때문에, 서로 다른 열에 대한 조건 검색 결과를 한 번에 확인할 때 매우 유용합니다.
아래 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable645 (Id int,FirstName varchar(100));
Query OK, 0 rows affected (0.67 sec)
2. 레코드 삽입하기
INSERT 명령어를 사용해 테이블에 데이터를 입력합니다.
mysql> insert into DemoTable645 values(100,'Chris');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable645 values(101,'Robert');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable645 values(101,'Bob');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable645 values(102,'Carol');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable645 values(100,'John');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable645 values(100,'Robert');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable645 values(101,'Mike');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable645 values(101,'John');
Query OK, 1 row affected (0.14 sec)
3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 데이터를 조회합니다.
mysql> select *from DemoTable645;
실행 결과는 다음과 같습니다.
+------+-----------+
| Id | FirstName |
+------+-----------+
| 100 | Chris |
| 101 | Robert |
| 101 | Bob |
| 102 | Carol |
| 100 | John |
| 100 | Robert |
| 101 | Mike |
| 101 | John |
+------+-----------+
8 rows in set (0.00 sec)
4. 여러 열을 동시에 검색하는 쿼리
다음은 UNION을 사용해 Id 열과 FirstName 열을 동시에 검색하는 쿼리입니다.
mysql> select Id AS Records from DemoTable645 where Id LIKE '%100%'
union
select FirstName from DemoTable645 where FirstName LIKE '%John%'
order by 1 LIMIT 3;
5. 실행 결과
+---------+
| Records |
+---------+
| 100 |
| John |
+---------+
2 rows in set (0.00 sec)
위 결과를 보면, 첫 번째 SELECT 문은 Id 값 중 '100'과 일치하는 항목을, 두 번째 SELECT 문은 FirstName 값 중 'John'과 일치하는 항목을 각각 검색한 뒤 UNION으로 하나의 결과 집합으로 결합한 것을 알 수 있습니다.
여기서 ORDER BY 1은 결합된 결과의 첫 번째 열을 기준으로 정렬하며, LIMIT 3은 최대 3개의 행만 반환하도록 결과 개수를 제한합니다. 이처럼 UNION을 활용하면 서로 다른 열에 대한 검색 조건을 손쉽게 통합해 처리할 수 있습니다.