MySQL에서 LIKE 연산자는 패턴 매칭에 사용되며, %는 와일드카드 문자로 해석됩니다. 따라서 열 값에 실제로 포함된 % 문자를 검색하려면 백슬래시(\)로 이스케이프 처리해야 합니다.
기본 문법
%가 포함된 열 값을 검색하려면 다음과 같은 문법을 사용합니다.
SELECT * FROM yourTableName WHERE yourColumnName LIKE '\%%';
여기서 \%는 와일드카드가 아닌 리터럴 % 문자를 의미하며, 뒤의 %는 임의의 문자열과 매칭되는 와일드카드입니다.
예제 테이블 생성
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> CREATE TABLE DemoTable1497
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.55 sec)데이터 삽입
INSERT 문을 사용하여 % 문자를 포함한 레코드와 그렇지 않은 레코드를 함께 삽입합니다.
mysql> INSERT INTO DemoTable1497 VALUES('%JohnSmith');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable1497 VALUES('DavidMiller');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable1497 VALUES('CarolTaylor%');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable1497 VALUES('%DavidMiller');
Query OK, 1 row affected (0.12 sec)전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> SELECT * FROM DemoTable1497;
실행 결과는 다음과 같습니다.
+--------------+ | Name | +--------------+ | %JohnSmith | | DavidMiller | | CarolTaylor% | | %DavidMiller | +--------------+ 4 rows in set (0.00 sec)
% 문자 검색 쿼리 실행
이제 이스케이프 처리된 \%를 사용하여 이름이 % 문자로 시작하는 행을 검색합니다.
mysql> SELECT * FROM DemoTable1497
-> WHERE Name LIKE '\%%';실행 결과는 다음과 같습니다.
+--------------+ | Name | +--------------+ | %JohnSmith | | %DavidMiller | +--------------+ 2 rows in set (0.00 sec)
결과 분석
위 결과를 보면 % 문자로 시작하는 두 개의 행만 반환된 것을 확인할 수 있습니다. 참고로 'CarolTaylor%'처럼 %가 끝에 있는 값은 이 쿼리 조건에 해당하지 않아 제외되었습니다. 만약 % 위치와 관계없이 % 문자를 포함한 모든 값을 검색하고 싶다면 LIKE '%\%%'처럼 앞뒤에 와일드카드를 추가하면 됩니다.