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

MySQL에서 하나의 값으로 여러 열을 동시에 검색하는 방법 – IN 연산자 활용 가이드

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 연산자를 사용하면 코드가 훨씬 깔끔해집니다.