MySQL에서 두 개의 LIKE 문을 OR로 결합하기
MySQL에서는 OR 연산자를 사용하여 두 개 이상의 LIKE 조건을 하나의 쿼리에서 결합할 수 있습니다. 기본 문법은 다음과 같습니다.
SELECT * FROM yourTableName
WHERE (yourColumnName LIKE '%yourValue1%' OR yourColumnName LIKE '%yourValue2%')
AND yourColumnName = yourValue;
위 문법에서 핵심은 여러 개의 LIKE 조건을 괄호로 묶고, 각 조건 사이에 OR 연산자를 넣는 것입니다. 그리고 추가 조건이 필요하다면 AND 연산자를 함께 사용하면 됩니다.
예제 테이블 생성하기
문법을 실제로 이해하기 위해 예제 테이블을 먼저 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table ORLikeDemo
-> (
-> Id int not null auto_increment,
-> FirstName varchar(15),
-> LastName varchar(15),
-> Primary Key(Id)
-> );
Query OK, 0 rows affected (1.19 sec)
샘플 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into ORLikeDemo(FirstName,LastName) values('John','Smith');
Query OK, 1 row affected (0.13 sec)
mysql> insert into ORLikeDemo(FirstName,LastName) values('Carol','Taylor');
Query OK, 1 row affected (0.23 sec)
mysql> insert into ORLikeDemo(FirstName,LastName) values('John','Doe');
Query OK, 1 row affected (0.11 sec)
mysql> insert into ORLikeDemo(FirstName,LastName) values('Bob','Jones');
Query OK, 1 row affected (0.20 sec)
mysql> insert into ORLikeDemo(FirstName,LastName) values('David','Miller');
Query OK, 1 row affected (0.17 sec)
mysql> insert into ORLikeDemo(FirstName,LastName) values('Mike','Williams');
Query OK, 1 row affected (0.11 sec)
mysql> insert into ORLikeDemo(FirstName,LastName) values('Sam','Taylor');
Query OK, 1 row affected (0.14 sec)전체 레코드 조회하기
SELECT 문을 사용하여 테이블의 모든 레코드를 확인합니다.
mysql> select *from ORLikeDemo;
실행 결과는 다음과 같습니다.
+----+-----------+----------+
| Id | FirstName | LastName |
+----+-----------+----------+
| 1 | John | Smith |
| 2 | Carol | Taylor |
| 3 | John | Doe |
| 4 | Bob | Jones |
| 5 | David | Miller |
| 6 | Mike | Williams |
| 7 | Sam | Taylor |
+----+-----------+----------+
7 rows in set (0.00 sec)
OR 연산자와 함께 두 개의 LIKE 조건 사용하기
이제 OR 연산자를 사용하여 두 개의 LIKE 조건을 결합하는 쿼리를 실행해 보겠습니다. 아래 예제는 성(LastName)이 'Smith' 또는 'Doe'를 포함하면서, 동시에 Id가 3인 레코드를 조회합니다.
mysql> select *from ORLikeDemo where (LastName like '%Smith%' OR LastName like '%Doe%') AND Id = 3;
실행 결과는 다음과 같습니다.
+----+-----------+----------+
| Id | FirstName | LastName |
+----+-----------+----------+
| 3 | John | Doe |
+----+-----------+----------+
1 row in set (0.03 sec)
정리
위 결과를 보면 LastName이 'Smith' 또는 'Doe'에 해당하는 조건과 Id = 3이라는 조건이 모두 만족되어, 해당하는 단일 레코드만 반환된 것을 확인할 수 있습니다. 이처럼 여러 LIKE 조건을 OR로 묶고 필요에 따라 AND 조건을 추가하면, 복잡한 패턴 매칭 검색도 손쉽게 구현할 수 있습니다. 참고로 검색 대상 값이 많아지면 REGEXP 연산자나 FULLTEXT 인덱스를 활용하는 것이 성능 면에서 더 유리할 수 있습니다.