Database

[MySQL] WHERE ~ IN - 다중 컬럼 지정

비번변경 2025. 7. 4. 17:06

개요

데이터베이스에서 데이터를 조회하다 보면 여러 컬럼에 대한 조건을 OR 조건으로 연달아 나열해야 하는 경우가 있다.

 SELECT *
   FROM table1
  WHERE (column1 = value1 AND column2 = value2)
     OR (column1 = value3 AND column2 = value4)
     OR (column1 = value5 AND column2 = value6)
;

나열할 조건이 많아질수록 쿼리도 길어지고 보기 어려운데, IN 조건을 활용하면 조금 더 가독성 있는 쿼리를 작성할 수 있다.

문법을 적어둔다.

 

 

다중컬럼 IN 조건

일반적으로 단일 컬럼을 예로 들은 문서가 많아서 몰랐는데, 조건절에 사용할 컬럼을 소괄호로 묶어서 나열하고, 값도 동일하게 소괄호로 묶어서 나열하면 된다.

SELECT *
  FROM table1
 WHERE (column1, column2) IN ((value1, value2), (value3, value4), (value5, value6))

데이터를 조회할 때뿐만 아니라 UPDATE, DELETE 문을 수행할 때도 동일하게 사용할 수 있다. 데이터를 일괄로 처리할 수 있어 유용하다.

 

 

예시

다음과 같이 물건의 유형과 이름을 저장하는 테이블이 있다고 하자. 

| type   | name |
| ------ | ---- |
| fruit  | 수박   |
| fruit  | 사과   |
| fruit  | 사과  |
| cooker | 뒤집개  |

 

DDL

더보기
CREATE TABLE test (
  type varchar(50),
  name varchar(50)
);
INSERT INTO test VALUES ('fruit', '수박');
INSERT INTO test VALUES ('fruit', '사과');
INSERT INTO test VALUES ('fruit', '사과');
INSERT INTO test VALUES ('cooker', '뒤집개');

이 테이블에서 type이 fruit이고, name이 수박인 행과 type이 cooker이고 name이 뒤집개인 행을 조회하고 싶다면 쿼리를 아래와 같이 작성하면 된다.

SELECT *
FROM test
WHERE TRUE
	AND (type, name) IN (('fruit', '수박'), ('cooker', '뒤집개'))
;

-- 실행 결과
| type   | name |
| ------ | ---- |
| fruit  | 수박   |
| cooker | 뒤집개  |

 

 

 

참고 문서

https://jh-tr.tistory.com/104

 

 

728x90