IT무새/Database

[MySQL] IN 연산자

코딩무새 2025. 2. 6. 01:42

껄껄껄

코딩무새입니다.

 

 

이번 포스팅에선 IN에 대해서 알아보겠습니다!

 

IN 연산자란?

IN 연산자는 특정 열의 값이 주어진 리스트에 포함되는지 사용하는데요.

리스트는 괄호 안에 들어있는 데이터를 의미합니다.

IN 연산자를 사용함으로써 OR를 여러 번 사용하지 않고도 같은 결과를 간단한 쿼리로 만들어낼 수 있어요.

 

기본문법

IN 연산자의 기본 문법은 다음과 같습니다.

...
WHERE {COLUMN1} IN ({VALUE1}, {VALUE2}, {VALUE3})

 

COLUMN1이라는 특정 열이 VALUE1~3까지의 데이터 리스트에 포함되는지 확인하는 것이죠.

 

실제 쿼리로 데이터를 확인해 보겠습니다.

예시 쿼리는 국가별 코드가 담긴 테이블인데요.

code가 KR / JP / US 리스트에 포함되는 열만 조회가 되었어요.

SELECT * 
FROM country_code 
WHERE code IN ('KR', 'JP', 'US');
+-----+------+----------+---------------+
| id  | code | name_kr  | name_en       |
+-----+------+----------+---------------+
|  29 | KR   | 대한민국 | South Korea   |
|  69 | US   | 미국     | United States |
| 175 | JP   | 일본     | Japan         |
+-----+------+----------+---------------+
3 rows in set (0.00 sec)

 

국가코드는 아래링크의 방법들을 활용했으니 궁금하시면 보러 가세요~

수집: https://coding-parrot.tistory.com/38

적재: https://coding-parrot.tistory.com/40

 

서브쿼리

서브쿼리란 SQL문 안에 또 다른 SQL문이 존재하는 것을 의미하는데요.

IN 연산자에서도 서브쿼리를 사용하여 데이터를 조회할 수 있습니다.

 

우선 IN 연산을 사용할 데이터를 볼까요?

국가 코드를 가지고 있는 사용자 데이터네요.

SELECT username, code 
FROM users;
+----------+------+
| username | code |
+----------+------+
| parrot   | KR   |
| test1    | US   |
| test2    | JP   |
| test3    | DE   |
| apt      | KR   |
| bear     | CA   |
| zip      | US   |
+----------+------+
7 rows in set (0.00 sec)

 

서브쿼리로 IN 연산자를 사용해 봅니다.

SELECT username, code
FROM users
WHERE code IN (SELECT code FROM country_code WHERE code IN ('KR','JP','US'));
+----------+------+
| username | code |
+----------+------+
| parrot   | KR   |
| test1    | US   |
| test2    | JP   |
| apt      | KR   |
| zip      | US   |
+----------+------+
5 rows in set (0.00 sec)


코드가 KR / JP / US 인 사용자 데이터만 잘 가져왔네요.

 

NOT IN

IN 연산자가 포함된 데이터를 가져온다면, 포함되지 않은 데이터만 가져오려면 어떻게 해야 할까요?

이럴 땐 NOT IN을 사용하면 됩니다!!!

SELECT username, code 
FROM users 
WHERE code NOT IN (SELECT code FROM country_code WHERE code IN ('KR','JP','US'));
+----------+------+
| username | code |
+----------+------+
| test3    | DE   |
| bear     | CA   |
+----------+------+
2 rows in set (0.00 sec)

 

바로 위의 서브쿼리 사용 예제에서 IN을 NOT IN으로 바꿔봤어요.

KR / JP / US 코드가 포함되지 않은 DE / CA 사용자 데이터가 나왔네요.

 

참 쉽죠!?

 

 


 

IN을 사용하지 않고 OR를 사용한다면 쿼리가 복잡해질수록 문제가 많아질 확률이 높아집니다.

IN을 잘 활용하셔서 깔끔하고 편안한 코딩 하세요.

껄껄껄