Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL IN()으로 밑줄이 포함된 열 값 조회하기 – 정확한 일치 원리와 LIKE 활용법

MySQL에서 IN() 연산자는 지정한 값 목록과 정확히 일치하는 행만 반환합니다. 이 글에서는 밑줄(_)이 포함된 열 값이 있을 때 IN()이 어떻게 동작하는지 예제를 통해 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 예제에 사용할 테이블을 만듭니다.

mysql> create table DemoTable1363
-> (
-> StudentId varchar(20)
-> );
Query OK, 0 rows affected (0.57 sec)

2단계: 레코드 삽입

insert 명령으로 데이터를 추가합니다. 일반적인 학생 ID뿐 아니라 밑줄이 포함된 ID도 함께 넣어 결과를 비교해 보겠습니다.

mysql> insert into DemoTable1363 values('901');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1363 values('702');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1363 values('901_John_Doe');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1363 values('1001_Carol_Taylor');
Query OK, 1 row affected (0.26 sec)

3단계: 전체 데이터 확인

select 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable1363;

실행 결과는 다음과 같습니다.

+-------------------+
| StudentId |
+-------------------+
| 901 |
| 702 |
| 901_John_Doe |
| 1001_Carol_Taylor |
+-------------------+
4 rows in set (0.00 sec)

4단계: IN() 쿼리 실행

IN()을 사용해 특정 학생 ID를 조회하는 쿼리는 다음과 같습니다.

mysql> select * from DemoTable1363 where StudentId IN('702','1001');

결과는 아래와 같습니다.

+-----------+
| StudentId |
+-----------+
| 702 |
+-----------+
1 row in set (0.00 sec)

결과 분석: 왜 1001_Carol_Taylor는 조회되지 않았을까?

조건 목록에 '1001'을 넣었는데도 1001_Carol_Taylor는 결과에 나타나지 않았습니다. 그 이유는 IN()이 완전 일치(exact match) 방식으로 동작하기 때문입니다. '1001'과 '1001_Carol_Taylor'는 서로 다른 별개의 문자열로 취급되며, 부분 일치는 고려하지 않습니다.

부분 일치 검색이 필요하다면 LIKE 활용

특정 값으로 시작하는 문자열(예: '1001_...' 형태)까지 함께 찾으려면 와일드카드(%)와 함께 LIKE를 사용하는 것이 좋습니다.

mysql> select * from DemoTable1363
-> where StudentId LIKE '1001%';
+-------------------+
| StudentId |
+-------------------+
| 1001_Carol_Taylor |
+-------------------+
1 row in set (0.00 sec)

정리하면, IN()은 정확한 값 비교에 적합하고 접두사나 패턴 기반 검색에는 LIKE가 더 적합합니다. 두 연산자의 동작 차이를 이해하고 있으면 상황에 맞는 쿼리를 작성하는 데 큰 도움이 됩니다.