MySQL에서 여러 컬럼(필드)에 걸쳐 하나의 검색 조건을 적용하고 싶다면 CONCAT() 함수와 LIKE 연산자를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 두 필드를 하나의 문자열로 결합한 뒤 원하는 패턴을 검색하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 데모용 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> StudentName varchar(20),
-> StudentSubject varchar(20)
-> );
Query OK, 0 rows affected (0.58 sec)
2. 샘플 데이터 삽입하기
INSERT 문을 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('John','MySQL');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Adam','MySQL');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('John','Java');
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values('Carol','Java');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('John','MongoDB');
Query OK, 1 row affected (0.12 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 봅니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------------+----------------+
| StudentName | StudentSubject |
+-------------+----------------+
| John | MySQL |
| Adam | MySQL |
| John | Java |
| Carol | Java |
| John | MongoDB |
+-------------+----------------+
5 rows in set (0.00 sec)
4. CONCAT + LIKE로 여러 필드에서 값 검색하기
여러 필드에서 동일한 값을 찾으려면 CONCAT() 함수로 두 컬럼을 하나의 문자열로 합친 후, LIKE 연산자로 패턴을 비교하면 됩니다. 아래 쿼리는 'StudentName'과 'StudentSubject'를 공백으로 연결한 값이 'John MySQL'인 행을 검색합니다.
mysql> select *from DemoTable
-> where concat(StudentName,' ',StudentSubject)
-> like '%John MySQL%';
실행 결과는 다음과 같습니다.
+-------------+----------------+
| StudentName | StudentSubject |
+-------------+----------------+
| John | MySQL |
+-------------+----------------+
1 row in set (0.00 sec)
정리
CONCAT() 함수를 활용하면 여러 컬럼의 값을 하나의 문자열로 묶어 LIKE 연산자로 한 번에 검색할 수 있습니다. 패턴 앞뒤에 와일드카드 %를 붙이면 부분 일치 검색도 가능하므로, 이름과 과목처럼 서로 다른 필드에 걸친 복합 조건 검색에 유용하게 사용됩니다. 다만 CONCAT으로 결합한 값에는 인덱스가 적용되지 않아 대량의 데이터에서는 성능이 저하될 수 있으므로, 성능이 중요한 환경이라면 FULLTEXT 인덱스나 별도의 검색 컬럼 설계를 함께 고려하는 것이 좋습니다.