MySQL 단일 쿼리에서 여러 LIKE 조건 결합하기
MySQL에서 하나의 SELECT 문 안에 여러 개의 LIKE 조건을 적용하려면 각 조건을 OR 연산자로 연결하면 됩니다. 이렇게 하면 이름, 나이, 국가처럼 서로 다른 컬럼을 대상으로 한 번의 쿼리만으로 패턴 검색을 수행할 수 있습니다.
기본 문법
SELECT * FROM yourTableName WHERE yourColumnName1 LIKE '%yourValue1%' OR yourColumnName2 LIKE '%yourValue2%' OR yourColumnName3 LIKE '%yourValue3%';
예제 테이블 생성
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1534
-> (
-> ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName varchar(20),
-> ClientAge int,
-> ClientCountryName varchar(20)
-> );
Query OK, 0 rows affected (0.78 sec)
샘플 데이터 삽입
INSERT 명령을 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable1534(ClientName,ClientAge,ClientCountryName) values('Chris Brown',29,'AUS');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1534(ClientName,ClientAge,ClientCountryName) values('David Miller',49,'UK');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1534(ClientName,ClientAge,ClientCountryName) values('John Doe',43,'US');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable1534(ClientName,ClientAge,ClientCountryName) values('Adam Smith',38,'US');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1534(ClientName,ClientAge,ClientCountryName) values('Carol Taylor',36,'UK');
Query OK, 1 row affected (0.16 sec)
전체 레코드 조회
SELECT 문으로 테이블에 저장된 모든 데이터를 확인합니다.
mysql> select * from DemoTable1534;
실행 결과는 다음과 같습니다.
+----------+--------------+-----------+-------------------+ | ClientId | ClientName | ClientAge | ClientCountryName | +----------+--------------+-----------+-------------------+ | 1 | Chris Brown | 29 | AUS | | 2 | David Miller | 49 | UK | | 3 | John Doe | 43 | US | | 4 | Adam Smith | 38 | US | | 5 | Carol Taylor | 36 | UK | +----------+--------------+-----------+-------------------+ 5 rows in set (0.00 sec)
여러 LIKE 조건을 사용한 쿼리 실행
이제 세 개의 컬럼에 서로 다른 패턴을 지정하여 한 번의 쿼리로 검색해 보겠습니다.
mysql> select * from DemoTable1534
-> where ClientName LIKE '%Doe%'
-> or ClientAge LIKE '%38%'
-> or ClientCountryName LIKE '%S';
이 쿼리는 아래 세 가지 조건 중 하나라도 참인 행을 모두 반환합니다.
- ClientName이 'Doe'를 포함하는 경우
- ClientAge 값에 '38'이 포함되는 경우
- ClientCountryName이 'S'로 끝나는 경우
실행 결과는 다음과 같습니다.
+----------+-------------+-----------+-------------------+ | ClientId | ClientName | ClientAge | ClientCountryName | +----------+-------------+-----------+-------------------+ | 1 | Chris Brown | 29 | AUS | | 3 | John Doe | 43 | US | | 4 | Adam Smith | 38 | US | +----------+-------------+-----------+-------------------+ 3 rows in set (0.00 sec)
결과 해석
- Chris Brown — 국가 코드 'AUS'가 'S'로 끝나므로 세 번째 조건에 해당합니다.
- John Doe — 이름에 'Doe'가 포함되어 첫 번째 조건을 만족하며, 국가명 'US' 역시 'S'로 끝납니다.
- Adam Smith — 나이가 38이므로 두 번째 조건에 해당하고, 국가명 'US'로 세 번째 조건도 함께 만족합니다.
주의할 점은, LIKE('%값%' OR ...)처럼 괄호 안에 OR 조건을 넣는 방식은 의도한 대로 평가되지 않거나 경고(warnings)를 유발할 수 있다는 것입니다. 여러 LIKE 조건을 사용할 때는 위 예제처럼 각 조건을 독립적인 술어로 작성하고 OR로 연결하는 것이 올바른 방법이며, 가독성 면에서도 훨씬 유리합니다.