본문 바로가기

Data Literacy/SQL

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

PostgreSQL

 

 

앞선 아티클에서 IN을 통해서 WHERE에서 조건을 설정하는 방법을 살펴보았습니다. IN ( ) / 또는 NOT IN ( )을 이용해서 특정 조건을 필터링하는 예제를 살펴보았죠. 여기서 OR가 적용된다는 간단하지만 중요한 원칙도 살펴보았습니다. 

 

이번에는 IN과 서브쿼리를 연계하여 데이터를 필터링하는 형태를 살펴보겠습니다. 일단, 서브쿼리를 적용하는 사례에 앞서서, 간단하게 다음 조건을 만족하는 쿼리를 작성해 보도록 하겠습니다. 참고로 여기서 WHERE에서는 CAST 함수를 사용해서 조건을 지정하게 됩니다. 

 

Q. RENTAL 테이블에서 DVD 회수 날짜가 2005년 5월 27일인 CUSTOMER_ID가 무엇인지 출력해 주세요.

 

select customer_id
  from rental r
 where cast (return_date as date)
       = '2005-05-27'

 

 

 

 


 

 

자, 이제는 위에서 작성한 쿼리문 전체가 '특정 CUSTOMER_ID'를 찾기 위한 과정 중 하나였다고 생각해 보겠습니다. [저렇게 뽑은 CUSTOMER_ID에 해당하는 데이터에 대해서 명령을 내리는] 것도 가능해질 것입니다. 다음 질문을 통해 서브쿼리를 반영하여 명령어를 작성해 보겠습니다. 

 

Q. RENTAL 테이블에서 DVD 회수 날짜가 2005년 5월 27일인 CUSTOMER_ID를 CUSTOMER 테이블에서 찾아 FIRST_NAME과 LAST_NAME을 출력해 주세요.

 

select first_name, last_name
  from customer c 
 where customer_id in (
   select customer_id 
   from rental r 
   where cast (return_date as date) = '2005-05-27'
 )

 

위에서 설명한 것처럼, 첫 번째 Q 예제에 들어간 쿼리가 이번 쿼리의 WHERE 절에서 전체가 사용되었습니다. 

 

 

 

어차피 비슷한 내용이 있는데, 굳이 서브쿼리까지 사용해야 하는지 의문이 들 수도 있습니다. 하지만, 관계형으로 설계된 이러한 데이터는 상호 간에 분리된 영역을 독립적으로 관리해 주면서도 촘촘히 연결된 관계를 갖고 있기 때문에 각각의 테이블에서 데이터를 취합하고 그 데이터를 다른 테이블에 적용하는 연습도 충분히 해주어야 합니다.