MySQL에서는 IN() 함수를 단순한 값 비교뿐만 아니라 행 생성자(row constructor)를 비교하는 데에도 활용할 수 있습니다. 행 생성자는 괄호 안에 여러 개의 값을 묶어 표현한 것으로, 예를 들어 (10, 2)와 같은 형태입니다.
IN() 함수로 행 생성자 비교하기
IN() 함수 안에 행 생성자 목록을 넣으면, 왼쪽에 있는 행 생성자가 목록의 어떤 항목과 정확히 일치하는지 판단합니다. 일치하는 행이 있으면 1, 없으면 0을 반환합니다.
예제 1: 일치하는 행이 존재하는 경우
mysql> Select (10,2) IN ((5,10),(10,2),(2,10),(100,100)); +--------------------------------------------+ | (10,2) IN ((5,10),(10,2),(2,10),(100,100)) | +--------------------------------------------+ | 1 | +--------------------------------------------+ 1 row in set (0.00 sec)
위 쿼리에서는 비교 대상인 (10, 2)가 목록의 두 번째 항목인 (10, 2)와 정확히 일치하므로 결과로 1이 반환됩니다.
예제 2: 일치하는 행이 없는 경우
mysql> Select (10,2) IN ((5,10),(2,10),(100,100)); +-------------------------------------+ | (10,2) IN ((5,10),(2,10),(100,100)) | +-------------------------------------+ | 0 | +-------------------------------------+ 1 row in set (0.00 sec)
반면 이번에는 목록에 (10, 2)와 동일한 행이 존재하지 않으므로 결과가 0으로 반환됩니다.
핵심 정리
IN()함수는 행 생성자끼리의 비교도 지원합니다.- 비교 시 각 행을 구성하는 모든 값이 순서까지 포함하여 정확히 일치해야 합니다.
- 일치하면
1(TRUE), 일치하지 않으면0(FALSE)을 반환합니다. - 이 기능은 여러 컬럼 조합을 한 번에 조건으로 검사할 때 유용하게 사용할 수 있습니다.