본문 바로가기

Data Literacy/SQL

Chapter 1. 데이터 조회, 필터링(8) - IN 1

PostgreSQL

 

 

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;