MySQL에서는 IN 연산자를 활용하면 하나의 값이 여러 열(컬럼) 중 어디에 존재하는지 한 번의 쿼리로 확인할 수 있습니다. 이 방법은 여러 개의 OR 조건을 나열하는 것보다 코드가 간결하고 가독성이 뛰어나다는 장점이 있습니다.
기본 문법
SELECT * FROM yourTableName WHERE value IN(yourColumnName1, yourColumnName2, ......N);
위 문법의 핵심은 일반적으로 열이 IN 뒤에 오고 값이 왼쪽에 위치한다는 점입니다. 즉, 특정 값이 지정한 여러 열 중 하나라도 일치하면 해당 행이 결과로 반환됩니다.
예제 테이블 생성하기
개념을 이해하기 위해 몇 개의 열을 가진 테이블을 먼저 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> CREATE TABLE OneValueFromAllColumns -> ( -> StudentId int, -> StudentFirstname varchar(200), -> StudentLastname varchar(200), -> StudentAge int -> ); Query OK, 0 rows affected (1.41 sec)
샘플 데이터 삽입하기
INSERT 문을 사용하여 테이블에 학생 데이터를 입력합니다.
mysql> INSERT INTO OneValueFromAllColumns VALUES(1,'John','Smith',23); Query OK, 1 row affected (0.14 sec) mysql> INSERT INTO OneValueFromAllColumns VALUES(2,'Carol','Taylor',22); Query OK, 1 row affected (0.18 sec) mysql> INSERT INTO OneValueFromAllColumns VALUES(3,'Maria','Garcia',19); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO OneValueFromAllColumns VALUES(4,'Bob','Wilson',21); Query OK, 1 row affected (0.22 sec)
저장된 전체 레코드 조회하기
입력한 모든 레코드가 정상적으로 저장되었는지 SELECT 문으로 확인해 보겠습니다.
mysql> SELECT *FROM OneValueFromAllColumns;
실행 결과는 다음과 같습니다.
+-----------+------------------+-----------------+------------+ | StudentId | StudentFirstname | StudentLastname | StudentAge | +-----------+------------------+-----------------+------------+ | 1 | John | Smith | 23 | | 2 | Carol | Taylor | 22 | | 3 | Maria | Garcia | 19 | | 4 | Bob | Wilson | 21 | +-----------+------------------+-----------------+------------+ 4 rows in set (0.00 sec)
여러 열에서 특정 값 검색하기
이제 핵심인 단일 값으로 여러 열을 동시에 검색하는 쿼리를 살펴보겠습니다. 여기서는 'Taylor'라는 값이 StudentId, StudentFirstname, StudentLastname, StudentAge 네 개의 열 중 어디에 있는지 확인합니다.
mysql> SELECT *FROM OneValueFromAllColumns WHERE 'Taylor' IN(StudentId,StudentFirstname,StudentLastname,StudentAge);
'Taylor'라는 값을 포함한 레코드만 결과로 출력됩니다.
+-----------+------------------+-----------------+------------+ | StudentId | StudentFirstname | StudentLastname | StudentAge | +-----------+------------------+-----------------+------------+ | 2 | Carol | Taylor | 22 | +-----------+------------------+-----------------+------------+ 1 row in set, 4 warnings (0.03 sec)
참고 사항
실행 결과에 4 warnings가 표시된 것을 볼 수 있습니다. 이는 문자열 값 'Taylor'를 숫자형 열(StudentId, StudentAge)과 비교할 때 발생하는 타입 불일치 경고입니다. MySQL은 자동으로 형 변환을 시도하지만, 가능하면 같은 데이터 타입의 열끼리 비교하는 것이 성능과 정확성 면에서 바람직합니다.
또한 이 방식은 OR 조건을 사용하는 것과 논리적으로 동일합니다. 예를 들어 WHERE 'Taylor' = StudentFirstname OR 'Taylor' = StudentLastname과 같은 형태이며, IN 연산자를 사용하면 코드가 훨씬 깔끔해집니다.