MySQL에서 검색 조건 앞뒤에 와일드카드(%)를 붙여 부분 일치 검색을 하고 싶다면 CONCAT() 함수를 활용하면 됩니다. LIKE 절과 함께 사용하면 문자열의 시작, 중간, 끝 어디에 있든 원하는 값을 포함한 레코드를 손쉽게 조회할 수 있습니다.
기본 문법
와일드카드를 추가할 때는 CONCAT() 함수로 % 기호를 값의 양쪽에 연결합니다. 기본 문법은 다음과 같습니다.
SELECT * FROM yourTableName
WHERE yourColumnName LIKE CONCAT('%', yourValue, '%');
이제 실제 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> CREATE TABLE demo48
-> (
-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> name VARCHAR(20)
-> );
Query OK, 0 rows affected (0.70 sec)
2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 여러 개의 레코드를 추가합니다.
mysql> INSERT INTO demo48(name) VALUES('John Smith');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO demo48(name) VALUES('John Doe');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO demo48(name) VALUES('Adam Smith');
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO demo48(name) VALUES('David Miller');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO demo48(name) VALUES('Chris Brown');
Query OK, 1 row affected (0.11 sec)3. 저장된 레코드 확인하기
SELECT 문으로 테이블에 저장된 전체 데이터를 조회해 보겠습니다.
mysql> SELECT * FROM demo48;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+--------------+
| id | name |
+----+--------------+
| 1 | John Smith |
| 2 | John Doe |
| 3 | Adam Smith |
| 4 | David Miller |
| 5 | Chris Brown |
+----+--------------+
5 rows in set (0.00 sec)
4. 와일드카드를 활용한 조회 쿼리 실행하기
이제 CONCAT() 함수를 사용해 'Smith'라는 문자열이 이름 어디에든 포함된 레코드를 조회하는 쿼리를 실행합니다.
mysql> SELECT * FROM demo48 WHERE name LIKE CONCAT('%', 'Smith', '%');실행 결과는 다음과 같습니다.
+----+------------+
| id | name |
+----+------------+
| 1 | John Smith |
| 3 | Adam Smith |
+----+------------+
2 rows in set (0.00 sec)
정리
CONCAT('%', 값, '%') 형태를 사용하면 특정 문자열이 컬럼 값의 시작, 중간, 끝 어느 위치에 있더라도 해당 레코드를 모두 조회할 수 있습니다. 만약 문자열이 시작하는 경우만 찾고 싶다면 CONCAT('값', '%'), 끝나는 경우만 찾고 싶다면 CONCAT('%', '값')처럼 와일드카드 위치를 조절하면 됩니다. 이처럼 CONCAT()과 LIKE를 조합하면 MySQL에서 유연한 패턴 검색을 간단하게 구현할 수 있습니다.