IN 연산자는 일종의 조건 연산자입니다. 즉, 우리가 앞서 배웠던 대표적인 조건 연산자 사용 명령어인 WHERE과 깊은 관계를 맺고 있는 것이죠. 통상적으로는 WHERE에서 특정 칼럼의 조건을 기재하는 방식으로 데이터를 필터링했었습니다. 그런데 이때, 이 IN을 사용하면서 좀 더 쿼리를 간단하게 작성할 수 있습니다.
일단 기본적인 쿼리의 정의를 살펴보겠습니다.
select *
from table_name
where column_name in (value1, value2, ...)
위와 같은 경우는 해당 칼럼(column_name)에 value1, value2가 존재하는지 여부를 검사하고 해당한다면 출력하는 조건을 부여하게 됩니다. 이 value1, value2,.... 는 OR의 조건을 갖게 됩니다.
예제를 통해서 확인해 보겠습니다.
Q. RENTAL 테이블에서 CUSTOMER_ID가 1번 또는 2번인 고객의 CUSTOMER_ID와 RENTAL_ID, RETURN_DATE를 출력하세요. 단, 정렬은 회수 일자를 기준으로 내림차순으로 해주세요.
select customer_id
, rental_id
, return_date
from rental r
where customer_id in (1, 2)
order by return_date desc;
참고로 위의 IN 명령어는 OR와 같다고 했습니다. 그럼 위의 쿼리는 아래와 같이 사용할 수도 있습니다.
select customer_id
, rental_id
, return_date
from rental r
where customer_id = 1
or customer_id = 2
order by return_date desc;
단, 입력 쿼리의 길이와 검색 최적화를 위해서 IN을 사용하는 것을 권장합니다.
Q. RENTAL 테이블에서 CUSTOMER_ID가 1번 또는 2번 고객을 제외한 모든 고객의 CUSTOMER_ID와 RENTAL_ID, RETURN_DATE를 출력하세요. 단, 정렬은 회수 일자를 기준으로 내림차순으로 해주세요.
select customer_id
, rental_id
, return_date
from rental r
where customer_id not in (1, 2)
order by return_date desc
위의 NOT IN 역시 다음과 같이 풀어쓸 수 있습니다.
select customer_id
, rental_id
, return_date
from rental r
where customer_id <> 1
and customer_id <> 2
order by return_date desc;
'Data Literacy > SQL' 카테고리의 다른 글
Chapter 1. 데이터 조회, 필터링(9) - BETWEEN (0) | 2023.05.14 |
---|---|
Chapter 1. 데이터 조회, 필터링(8) - IN 2 (0) | 2023.05.11 |
Chapter 1. 데이터 조회, 필터링(7) - FETCH(w/OFFSET) (1) | 2023.05.06 |
Chapter 1. 데이터 조회, 필터링(6) - LIMIT (w/OFFSET) (0) | 2023.05.04 |
Chapter 1. 데이터 조회, 필터링(5) - 실전 예제1 [2/2] (0) | 2023.05.03 |