MySQL에서 특정 문자열을 검색할 때 흔히 와일드카드 %를 사용하지만, 이는 0개 이상의 임의 문자를 모두 일치시킵니다. 만약 정확히 한 글자만 일치시키고 싶다면 언더스코어(_)를 사용해야 합니다.
기본 문법
SELECT * FROM yourTableName WHERE yourColumnName LIKE 'yourString_';
문자열 끝에 붙인 언더스코어(_)가 해당 위치의 단 하나의 문자와 일치합니다. 실제 예제를 통해 살펴보겠습니다.
예제 테이블 생성
먼저 졸업 연도(PassoutYear)를 저장하는 테이블을 생성합니다.
mysql> create table OneCharactermatchDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> PassoutYear year,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.76 sec)데이터 삽입
INSERT 명령으로 여러 개의 레코드를 추가합니다.
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2008');
Query OK, 1 row affected (0.14 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2007');
Query OK, 1 row affected (0.18 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2010');
Query OK, 1 row affected (0.10 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2011');
Query OK, 1 row affected (0.13 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2012');
Query OK, 1 row affected (0.12 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2006');
Query OK, 1 row affected (0.10 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2019');
Query OK, 1 row affected (0.14 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2016');
Query OK, 1 row affected (0.13 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2017');
Query OK, 1 row affected (0.34 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2015');
Query OK, 1 row affected (0.17 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2020');
Query OK, 1 row affected (0.13 sec)전체 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from OneCharactermatchDemo;
실행 결과는 다음과 같습니다.
+----+-------------+ | Id | PassoutYear | +----+-------------+ | 1 | 2008 | | 2 | 2007 | | 3 | 2010 | | 4 | 2011 | | 5 | 2012 | | 6 | 2006 | | 7 | 2019 | | 8 | 2016 | | 9 | 2017 | | 10 | 2015 | | 11 | 2020 | +----+-------------+ 11 rows in set (0.00 sec)
언더스코어로 한 글자 일치시키기
이제 '200_' 패턴을 사용하면 앞 세 자리가 '200'이고 네 번째 자리가 어떤 문자든 상관없는 값, 즉 2006년, 2007년, 2008년 데이터만 조회됩니다.
mysql> select *from OneCharactermatchDemo where PassoutYear Like '200_';
실행 결과:
+----+-------------+ | Id | PassoutYear | +----+-------------+ | 1 | 2008 | | 2 | 2007 | | 6 | 2006 | +----+-------------+ 3 rows in set (0.00 sec)
%와 _의 차이 정리
%는 0개 이상의 임의 개수 문자를 일치시키는 반면, _(언더스코어)는 정확히 한 개의 문자만 일치시킵니다. 따라서 자릿수가 고정된 값을 검색할 때는 _를, 가변 길이 패턴을 검색할 때는 %를 사용하는 것이 적절합니다. 두 와일드카드를 조합하여 '_00%'처럼 더 복잡한 패턴 매칭도 가능하다는 점도 기억해 두면 유용합니다.