제10장 IN - 여러 조건을 한 번에 비교하기
오늘의 질문
해외영업팀에서 고객 목록을 확인하고 있습니다.
팀장님이 말했습니다.
"이번 회의에서는 독일, 프랑스, 영국 고객만 확인하면 됩니다."
학생들은 보통 이렇게 작성하려고 합니다.
WHERE Country = 'Germany'
OR Country = 'France'
OR Country = 'UK';
물론 맞는 SQL입니다.
하지만 나라가 10개, 20개가 된다면 SQL이 너무 길어집니다.
이처럼 여러 값을 한 번에 비교할 때 사용하는 명령어가 바로 IN입니다.
학습 목표
이번 장을 학습하면 다음 내용을 할 수 있습니다.
- IN의 역할을 설명할 수 있다.
- 여러 개의 값을 한 번에 비교할 수 있다.
- IN과 OR의 차이를 이해할 수 있다.
- NOT IN을 이용하여 제외 조건을 만들 수 있다.
- 실제 업무에서 IN을 활용할 수 있다.
10-1. 먼저 실행해 봅시다.
먼저 다음 SQL을 실행해 보세요.
SELECT CustomerName,
Country
FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
실행 결과(예)
| CustomerName | Country |
| Alfreds Futterkiste | Germany |
| Around the Horn | UK |
| Bon app' | France |
지정한 세 나라의 고객만 조회됩니다.
이번에는 같은 기능을 OR로 작성해 보겠습니다.
SELECT CustomerName,
Country
FROM Customers
WHERE Country = 'Germany'
OR Country = 'France'
OR Country = 'UK';
결과는 완전히 같습니다.
잠깐 생각해 보기
두 SQL은 같은 결과를 출력합니다.
그렇다면 왜 IN을 사용할까요?
이유는 간단합니다.
SQL이 훨씬 짧고 읽기 쉬워집니다.
특히 비교할 값이 많아질수록 IN의 장점이 커집니다.
10-2. IN을 한 줄씩 읽어 보기
SELECT CustomerName,
Country
FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
한 줄씩 읽어 보면
SELECT CustomerName, Country
↓
고객 이름과 국가를 가져오고
FROM Customers
↓
Customers 테이블에서
WHERE
↓
조건을 만족하는 데이터만 선택하며
Country
↓
국가가
IN (...)
↓
목록 안에 포함되어 있으면 출력합니다.
즉,
국가가 Germany, France, UK 중 하나인 고객만 조회하라.
라는 의미입니다.
🤔 왜 IN이 필요할까요?
생각해 봅시다.
다음과 같은 SQL은 읽기 어렵습니다.
WHERE Country='Germany'
OR Country='France'
OR Country='UK'
OR Country='Spain'
OR Country='Brazil'
OR Country='Mexico';
하지만 IN을 사용하면
WHERE Country IN (
'Germany',
'France',
'UK',
'Spain',
'Brazil',
'Mexico'
);
처럼 훨씬 보기 쉬워집니다.
10-3. 숫자도 사용할 수 있습니다.
IN은 문자뿐 아니라 숫자도 사용할 수 있습니다.
SELECT ProductName,
SupplierID
FROM Products
WHERE SupplierID IN (1, 3, 5);
SupplierID가
1, 3, 5인 상품만 조회합니다.
10-4. NOT IN
반대로
목록에 없는 데이터를 찾을 수도 있습니다.
SELECT CustomerName,
Country
FROM Customers
WHERE Country NOT IN ('Germany', 'France');
독일과 프랑스를 제외한 모든 고객이 조회됩니다.
🤔 IN은 LIKE와 어떻게 다를까요?
많은 학생들이 LIKE와 IN을 혼동합니다.
예를 들어
LIKE 'Ger%'
↓
Germany처럼
비슷한 문자열을 찾습니다.
반면
IN ('Germany', 'France')
↓
정확히 같은 값만 찾습니다.
💡 잠깐! 이것도 알아두세요
IN 안에 들어가는 값은
반드시 쉼표(,)로 구분합니다.
IN ('Germany', 'France', 'UK')
처럼 작성해야 합니다.
자주 하는 실수
① 쉼표를 빼먹는다.
잘못된 예
IN ('Germany' 'France')
올바른 예
IN ('Germany', 'France')
② 문자에 따옴표를 쓰지 않는다.
잘못된 예
IN (Germany, France)
올바른 예
IN ('Germany', 'France')
③ LIKE 대신 IN을 사용한다.
IN ('Ger%')
은
Germany를 찾지 않습니다.
LIKE와 IN은 서로 다른 기능입니다.
④ NOT IN을 반대로 이해한다.
NOT IN (...)
은
목록을 제외하는 조건입니다.
실무에서는 어떻게 사용할까요?
회사에서는 IN을 이용하여
- 특정 국가 고객 조회
- 특정 공급업체 상품 조회
- 특정 직원의 주문 조회
- 특정 상품 번호 조회
- 특정 부서 직원 조회
등을 자주 수행합니다.
특히 사용자가 체크박스로 여러 항목을 선택하는 기능은 대부분 IN으로 처리합니다.
실습
실습 1
독일과 프랑스 고객을 조회하세요.
SELECT CustomerName,
Country
FROM Customers
WHERE Country IN ('Germany', 'France');
실습 2
SupplierID가 2 또는 4인 상품을 조회하세요.
SELECT ProductName,
SupplierID
FROM Products
WHERE SupplierID IN (2, 4);
실습 3
독일과 프랑스를 제외한 고객을 조회하세요.
SELECT CustomerName,
Country
FROM Customers
WHERE Country NOT IN ('Germany', 'France');
실무 미션
당신은 물류팀 직원입니다.
팀장님이 말했습니다.
"배송업체 번호가 1번과 3번인 주문만 확인해 주세요."
다음 조건을 만족하는 SQL을 작성해 보세요.
- Orders 테이블 사용
- OrderID와 ShipperID 조회
- 배송업체 번호가 1 또는 3
- 주문번호 순으로 정렬
핵심 정리
✔ IN은 여러 값을 한 번에 비교한다.
✔ OR를 여러 번 사용하는 대신 간결하게 작성할 수 있다.
✔ 숫자와 문자 모두 사용할 수 있다.
✔ NOT IN은 목록에 없는 데이터를 찾는다.
✔ 여러 선택 항목을 처리할 때 자주 사용된다.
연습 문제
기본 문제
- IN은 어떤 역할을 하나요?
- IN과 OR의 관계를 설명해 보세요.
- 다음 SQL의 의미를 설명해 보세요.
SELECT CustomerName
FROM Customers
WHERE Country IN ('Germany', 'France');
응용 문제
- Products 테이블에서 CategoryID가 1, 3, 5인 상품을 조회하는 SQL을 작성해 보세요.
- Orders 테이블에서 EmployeeID가 2 또는 5인 주문을 조회하는 SQL을 작성해 보세요.
- Customers 테이블에서 브라질(Brazil), 멕시코(Mexico), 아르헨티나(Argentina) 고객을 조회하는 SQL을 작성해 보세요.
도전 문제
사장님이 다음과 같이 요청했습니다.
"배송업체 번호가 2번이 아닌 주문만 확인하고 싶습니다."
Orders 테이블에서
- OrderID
- ShipperID
를 조회하는 SQL을 작성해 보세요.
다음 장 예고
이번 장에서는 IN을 이용하여 여러 값을 한 번에 비교하는 방법을 배웠습니다.
하지만 숫자나 날짜가 일정 범위 안에 있는 데이터를 찾고 싶을 때는 IN보다 더 적합한 명령어가 있습니다.
예를 들어 사장님이 이렇게 요청할 수 있습니다.
"가격이 20달러에서 50달러 사이인 상품만 보여 주세요."
"2023년 1월부터 3월까지의 주문만 조회해 주세요."
이처럼 범위를 기준으로 데이터를 검색할 때 사용하는 명령어가 바로 BETWEEN입니다.
다음 장에서는 BETWEEN - 일정 범위의 데이터 찾기를 배우며, 숫자와 날짜를 더욱 효율적으로 검색하는 방법을 익히게 됩니다.
"언제 무엇을 사용할까?"
| 상황 | 사용할 문법 |
| 값이 정확히 하나일 때 | = |
| 여러 값 중 하나일 때 | IN |
| 글자의 일부를 찾을 때 | LIKE |
| 일정 범위를 찾을 때 | BETWEEN |