개요
MySQL에서 이름(FirstName)과 성(LastName)이 하나의 컬럼에 함께 저장되어 있을 때, 특정 조합의 이름을 찾고 싶은 경우가 있습니다. 이때 LIKE 절을 두 번 사용하고 AND 연산자로 연결하면 원하는 레코드를 정확하게 조회할 수 있습니다.
예를 들어, 'John'이라는 이름과 'Doe'라는 성을 모두 포함하는 학생을 찾는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(30)
);
Query OK, 0 rows affected (0.70 sec)StudentId는 자동 증가(AUTO_INCREMENT) 기본키로 설정하고, StudentName에는 '이름 성' 형태로 데이터가 저장됩니다.
2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable(StudentName) values('John Smith');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentName) values('David Miller');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(StudentName) values('Carol Taylor');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(StudentName) values('John Doe');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentName) values('Chris Brown');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(StudentName) values('Adam Doe');
Query OK, 1 row affected (0.11 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+---------------+ | StudentId | StudentName | +-----------+---------------+ | 1 | John Smith | | 2 | David Miller | | 3 | Carol Taylor | | 4 | John Doe | | 5 | Chris Brown | | 6 | Adam Doe | +-----------+---------------+ 6 rows in set (0.00 sec)
총 6명의 학생 데이터가 저장되어 있으며, 여기에는 'John Smith', 'Adam Doe'처럼 이름 또는 성만 일치하는 레코드도 포함되어 있습니다.
4. LIKE 절 두 번 사용하여 특정 이름 조회하기
이름이 'John'이고 성이 'Doe'인 레코드를 조회하려면 아래와 같이 LIKE 절을 두 번 사용하고 AND로 연결하면 됩니다.
mysql> select *from DemoTable
where StudentName LIKE '%John%' and StudentName LIKE '%Doe%';실행 결과는 다음과 같습니다.
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 4 | John Doe | +-----------+-------------+ 1 row in set (0.00 sec)
결과 분석 및 핵심 포인트
조회 결과로 'John Doe'(StudentId: 4) 한 건만 반환되었습니다. 그 이유는 다음과 같습니다.
- 'John Smith'는 'John'은 포함하지만 'Doe'가 없어서 제외됩니다.
- 'Adam Doe'는 'Doe'는 포함하지만 'John'이 없어서 제외됩니다.
- 'John Doe'는 두 조건을 모두 만족하므로 최종 결과에 포함됩니다.
즉, LIKE '%John%'과 LIKE '%Doe%'를 AND로 연결하면 문자열 내에서 두 단어가 어느 위치에 있든 상관없이 두 키워드를 모두 포함하는 레코드만 필터링됩니다. 와일드카드 '%'는 임의의 문자열(빈 문자열 포함)을 의미하므로, 단어의 순서나 위치에 구애받지 않고 유연한 검색이 가능합니다.
이 방법은 이름과 성이 하나의 컬럼에 통합되어 저장된 시스템에서 특정 인물을 검색할 때 매우 유용하게 활용할 수 있습니다.