MySQL에서 LIKE 절과 함께 사용자 변수(User Variable)를 사용하려면 CONCAT() 함수를 활용하면 됩니다. 검색 조건을 동적으로 구성해야 할 때 매우 유용한 기법입니다.
기본 문법
SET @변수명 = '검색값';
SELECT 컬럼명1, 컬럼명2, 컬럼명3, ...N
FROM 테이블명
WHERE 컬럼명 LIKE CONCAT('%', @변수명, '%');
예제 테이블 생성
먼저 예제에 사용할 테이블을 만들어 보겠습니다.
mysql> CREATE TABLE UserVariableInLike
-> (
-> id INT,
-> Name VARCHAR(100),
-> Age INT
-> );
Query OK, 0 rows affected (0.83 sec)
데이터 삽입
INSERT 문을 사용하여 테이블에 레코드를 추가합니다.
mysql> INSERT INTO UserVariableInLike VALUES(101,'John',23);
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO UserVariableInLike VALUES(102,'John Smith',24);
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO UserVariableInLike VALUES(103,'Carol Smith',23);
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO UserVariableInLike VALUES(104,'Johnson',25);
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO UserVariableInLike VALUES(105,'Adam Smith',26);
Query OK, 1 row affected (0.21 sec)
전체 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> SELECT * FROM UserVariableInLike;
실행 결과는 다음과 같습니다.
+------+-------------+------+
| id | Name | Age |
+------+-------------+------+
| 101 | John | 23 |
| 102 | John Smith | 24 |
| 103 | Carol Smith | 23 |
| 104 | Johnson | 25 |
| 105 | Adam Smith | 26 |
+------+-------------+------+
5 rows in set (0.00 sec)
LIKE 절에서 사용자 변수 사용하기
이제 사용자 변수를 선언하고, LIKE 절과 CONCAT() 함수를 조합하여 부분 일치 검색을 수행해 보겠습니다.
mysql> SET @searchName='John';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT id, Name, Age FROM UserVariableInLike
WHERE Name LIKE CONCAT('%', @searchName, '%');
'John'이라는 문자열이 포함된 이름만 조회되는 것을 확인할 수 있습니다.
+------+------------+------+
| id | Name | Age |
+------+------------+------+
| 101 | John | 23 |
| 102 | John Smith | 24 |
| 104 | Johnson | 25 |
+------+------------+------+
3 rows in set (0.05 sec)
핵심 정리
LIKE 절에는 직접 사용자 변수를 넣을 수 없기 때문에, CONCAT('%', @변수명, '%') 형태로 문자열을 결합하여 사용해야 합니다. 이 방식을 활용하면 애플리케이션에서 검색어를 파라미터로 전달받아 유연하게 동적 쿼리를 작성할 수 있습니다. 참고로 전방 일치 검색을 원한다면 CONCAT(@변수명, '%'), 후방 일치 검색은 CONCAT('%', @변수명)으로 패턴을 조정하면 됩니다.