MySQL에서 열(column)에 저장된 문자열에 특정 문자열이 포함되어 있는지 확인하려면 CONCAT() 함수와 LIKE 연산자를 함께 사용하면 됩니다. 먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable ( Name varchar(40) ); Query OK, 0 rows affected (0.56 sec)
insert 명령을 사용하여 테이블에 여러 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable values('Adam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Bob');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('Johnson');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.12 sec)select 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+---------+ | Name | +---------+ | John | | Adam | | Bob | | Johnson | | David | +---------+ 5 rows in set (0.00 sec)
특정 문자열 포함 여부 확인 쿼리
다음은 열의 문자열에 특정 문자열('Joh')이 포함되어 있는지 확인하는 쿼리입니다.
mysql> select *from DemoTable where Name like "%Joh%" OR "Joh" LIKE CONCAT("%", Name, "%");위 쿼리는 다음과 같은 결과를 출력합니다.
+---------+ | Name | +---------+ | John | | Johnson | +---------+ 2 rows in set (0.00 sec)
쿼리 동작 원리
이 쿼리는 두 가지 조건을 OR로 결합하여 양방향으로 매칭을 수행합니다.
- Name like "%Joh%": 열에 저장된 값 자체가 'Joh'라는 문자열을 포함하고 있는지 확인합니다. 예를 들어 'John'과 'Johnson'이 이 조건에 해당합니다.
- "Joh" LIKE CONCAT("%", Name, "%"): 반대로 검색하려는 문자열('Joh')이 열의 값(Name)을 부분 문자열로 포함하고 있는지 확인합니다. CONCAT() 함수가 Name 값을 '%Name%' 형태의 패턴으로 만들어 비교합니다.
이처럼 두 조건을 함께 사용하면 열의 값이 검색 문자열에 포함된 경우와, 열의 값이 검색 문자열을 포함하는 경우 모두를 한 번의 쿼리로 확인할 수 있습니다.