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

MySQL IN() 비교 함수의 작동 원리와 활용법 총정리

MySQL의 IN() 비교 함수는 특정 값이 주어진 값 목록 안에 포함되어 있는지 확인하는 기능입니다. 값이 목록에 존재하면 1(참)을 반환하고, 존재하지 않으면 0(거짓)을 반환합니다.

IN() 함수의 기본 문법

Expression IN (val1, val2,…,valN)

각 요소의 의미는 다음과 같습니다.

  • Expression: IN 목록 내에서 검색하려는 값 또는 표현식입니다.
  • val1, val2,…, valN: 검색 대상이 되는 N개의 값들로, 이 값들이 모여 IN 목록을 구성합니다.

예제로 살펴보기

숫자 값과 문자열 값 모두 IN() 함수로 검사할 수 있습니다.

숫자 값 검사

mysql> Select 100 IN (50,100,200,400,2000);
+------------------------------+
| 100 IN (50,100,200,400,2000) |
+------------------------------+
|                                1 |
+------------------------------+
1 row in set (0.00 sec)

mysql> Select 1000 IN (50,100,200,400,2000);
+-------------------------------+
| 1000 IN (50,100,200,400,2000) |
+-------------------------------+
|                                0 |
+-------------------------------+
1 row in set (0.00 sec)

첫 번째 쿼리는 100이 목록에 포함되어 있으므로 1을 반환하고, 두 번째 쿼리는 1000이 목록에 없으므로 0을 반환합니다.

문자열 값 검사

mysql> Select 'ABC' IN ('ABCD','ABCDE','ABC');
+---------------------------------+
| 'ABC' IN ('ABCD','ABCDE','ABC') |
+---------------------------------+
|                                  1 |
+---------------------------------+
1 row in set (0.01 sec)

mysql> Select 'ABC' IN ('ABCD','ABCDE','ABCDEF');
+------------------------------------+
| 'ABC' IN ('ABCD','ABCDE','ABCDEF') |
+------------------------------------+
|                                      0 |
+------------------------------------+
1 row in set (0.00 sec)

문자열 역시 동일한 방식으로 동작합니다. 세 번째 예제에서는 'ABC'와 정확히 일치하는 값이 목록에 존재하기 때문에 1을 반환하지만, 네 번째 예제에서는 'ABCD', 'ABCDE', 'ABCDEF'처럼 부분적으로만 유사한 값만 있고 정확한 일치가 없기 때문에 0을 반환합니다.

WHERE 절에서의 실전 활용

IN() 함수는 실무에서 WHERE 절과 함께 자주 사용됩니다. 여러 개의 OR 조건을 간결하게 표현할 수 있어 가독성이 크게 향상됩니다.

SELECT * FROM employees
WHERE department_id IN (10, 20, 30);

이 쿼리는 부서 ID가 10, 20, 30 중 하나에 해당하는 모든 직원 레코드를 조회합니다.

NULL 처리 시 주의 사항

IN() 함수를 사용할 때 NULL 값 처리에 유의해야 합니다. 표현식이 NULL이면 결과도 NULL이 되며, 목록에 NULL이 포함되어 있고 일치하는 값이 없는 경우에도 NULL을 반환합니다. 따라서 NOT IN 조건을 사용할 때는 목록에 NULL이 섞여 있으면 의도치 않은 결과가 나올 수 있으니 주의가 필요합니다.