본문 바로가기

데이터 분석/Postgre SQL - 정리하자

IN 연산자를 활용해보자

반응형

# 구동 환경 : Postgre SQL 12.3 설치 -> pgAdmin4에서 아래 DB 연동 -> DBeaver 7.1.2 버전에서 코딩 진행

# 활용하는 DB = dvdrental.tar

PostgreSQL의 IN 연산자: 사용 이유와 중요성

IN 연산자는 SQL 쿼리에서 지정한 값 목록 중 하나와 일치하는 행을 조회하는 데 사용됩니다. 이 연산자는 데이터베이스 관리 및 분석에서 매우 유용합니다. 왜 IN 연산자를 사용해야 하며, 무엇이 중요한지에 대해 자세히 살펴보겠습니다.

 

IN 연산자를 사용하는 이유

  1. 다중 값 조건 필터링: IN 연산자는 여러 값을 한 번에 비교할 수 있어 특정 열의 값이 여러 값 중 하나와 일치하는지 쉽게 필터링할 수 있습니다. 예를 들어, 특정 부서의 직원들을 조회할 때 유용합니다.
  2. 가독성 향상: 복잡한 OR 조건을 사용하는 대신 IN 연산자를 사용하면 쿼리가 더 간결하고 읽기 쉬워집니다. 이는 쿼리 작성과 유지 보수를 용이하게 합니다.
  3. 효율적인 쿼리 작성: IN 연산자는 여러 개의 OR 조건을 사용하는 것보다 효율적이며, 쿼리를 단순화하고 실행 계획을 최적화하는 데 도움이 됩니다.
  4. 서브쿼리와 결합: IN 연산자는 서브쿼리와 결합하여 동적으로 생성된 값 집합을 기준으로 데이터를 필터링할 수 있습니다. 이는 복잡한 데이터 조회 시 유용합니다.

 

IN 연산자의 중요성

  1. 데이터 정확성 향상: 여러 값을 기준으로 데이터를 정확하게 필터링할 수 있어, 필요한 데이터만 정확하게 추출할 수 있습니다. 이는 데이터 분석과 보고서 작성에서 중요한 역할을 합니다.
  2. 쿼리 성능 최적화: IN 연산자는 여러 OR 조건을 대체하여 쿼리 성능을 최적화할 수 있습니다. 이를 통해 데이터베이스의 응답 시간을 줄이고, 효율적인 데이터 처리가 가능합니다.
  3. 유연한 데이터 접근: IN 연산자는 다양한 데이터 접근 시나리오를 지원합니다. 예를 들어, 특정 고객 집합에 대한 데이터를 조회하거나, 특정 상태의 주문을 필터링하는 등 다양한 상황에서 활용할 수 있습니다.
  4. 코드 유지 보수성 향상: IN 연산자를 사용하면 쿼리가 간결해져 코드의 가독성이 향상됩니다. 이는 쿼리의 유지 보수성과 수정 용이성을 높입니다.

 

IN 연산자의 활용

  1. 단순 값 목록 필터링: employees 테이블에서 특정 부서의 직원들을 조회합니다.
  2. 숫자 값 목록 필터링: products 테이블에서 특정 제품 ID의 제품들을 조회합니다.
  3. 서브쿼리와 결합: 서브쿼리를 사용하여 동적으로 생성된 값 집합을 기준으로 데이터를 필터링합니다. 예를 들어, 특정 고객의 주문을 조회합니다.
  4. NOT IN 사용: IN 연산자의 반대 개념으로, 특정 값 집합에 포함되지 않는 행을 조회할 수 있습니다. 예를 들어, 특정 부서가 아닌 직원들을 조회합니다.

 

IN 연산자는 특정 집합(컬럼 혹은 리스트)에서 특정 집합 혹은 리스트가 존재하는지 판단하는 연산자입니다.

SELECT 
         CUSTOMER_ID  -- 컬럼 선택
        ,RENTAL_ID    -- 컬럼 선택
        ,RETURN_DATE  -- 컬럼 선택
  FROM   RENTAL       -- 테이블 선택
 WHERE
         CUSTOMER_ID IN (1,2) -- CUSTOMER_ID가 1 혹은 2인 행을 출력
ORDER BY RETURN_DATE DESC;    -- 그 결과를 RETURN_DATE 컬럼 내림차순으로 출력

결과가 잘 출력되었습니다.

이번에는 동일한 결과를 IN 대신 OR를 활용해 확인해보겠습니다.

SELECT 
         CUSTOMER_ID  -- 컬럼 선택
        ,RENTAL_ID    -- 컬럼 선택
        ,RETURN_DATE  -- 컬럼 선택
  FROM   RENTAL       -- 테이블 선택
 WHERE
         CUSTOMER_ID = 1   -- CUSTOMER_ID가 1
      OR CUSTOMER_ID = 2   -- 혹은 2인 행을 출력
ORDER BY RETURN_DATE DESC; -- 그 결과를 RETURN_DATE 컬럼 내림차순으로 출력

동일한 결과가 나왔습니다.

이번에는 NOT을 활용하여 다른 방식으로 진행해보겠습니다.

SELECT 
         CUSTOMER_ID  -- 컬럼 선택
        ,RENTAL_ID    -- 컬럼 선택
        ,RETURN_DATE  -- 컬럼 선택
  FROM   RENTAL       -- 테이블 선택
 WHERE
         CUSTOMER_ID NOT IN (1,2) -- CUSTOMER_ID가 1이 아니고 2도 아닌 행을 출력
ORDER BY RETURN_DATE DESC;        -- 그 결과를 RETURN_DATE 컬럼 내림차순으로 출력

위 결과를 IN 연산자와 다른 방식으로 다시 진행해보겠습니다.

SELECT 
         CUSTOMER_ID  -- 컬럼 선택
        ,RENTAL_ID    -- 컬럼 선택
        ,RETURN_DATE  -- 컬럼 선택
  FROM   RENTAL       -- 테이블 선택
 WHERE
         CUSTOMER_ID <> 1  -- CUSTOMER_ID가 1이 아니고 
     AND CUSTOMER_ID <> 2  -- 2도 아닌 행을 출력
ORDER BY RETURN_DATE DESC; -- 그 결과를 RETURN_DATE 컬럼 내림차순으로 출력

동일한 결과가 출력되었습니다.

이번에는 서브 쿼리를 활용하여 진행해보겠습니다.

SELECT 
      CUSTOMER_ID -- 컬럼 선택
     ,RETURN_DATE -- 컬럼 선택
  FROM 
      RENTAL      -- 테이블 선택
 WHERE
  CAST (RETURN_DATE AS DATE) = '2005-05-27'; -- RETURN_DATE가 2005년 5월 27일인 CUSTOMER_ID를 출력

위 조건을 가지고 IN연산자를 활용해보겠습니다. 

 SELECT 
       FIRST_NAME
      ,LAST_NAME 
  FROM 
       CUSTOMER
 WHERE CUSTOMER_ID IN( -- return_date가 2005년 5월 27일 CUSTOMER_ID의
	SELECT             -- FIRST_NAME과 LAST_NAME을 출력
	      CUSTOMER_ID 
	  FROM 
	      RENTAL
	 WHERE
          CAST (RETURN_DATE AS DATE) = '2005-05-27'); 
          -- RETURN_DATE가 2005년 5월 27일인 CUSTOMER_ID를 출력

이런식으로 다른 테이블에 있는 값도 조건을 주고 불러올 수 있습니다,

결론

PostgreSQL의 IN 연산자는 여러 값을 한 번에 비교하여 데이터를 필터링하는 데 매우 유용한 도구입니다. 이를 통해 쿼리 작성이 간결해지고, 코드 가독성과 유지 보수성이 향상되며, 쿼리 성능을 최적화할 수 있습니다. IN 연산자를 잘 활용하면 데이터베이스 작업이 훨씬 더 효율적이고 효과적으로 이루어질 것입니다.

 

다음에는 BETWEEN 연산자에 대해서 보도록 하겠습니다.

반응형

'데이터 분석 > Postgre SQL - 정리하자' 카테고리의 다른 글

LIKE 연산자는?  (0) 2024.07.12
BETWEEN 연산자란?  (0) 2024.07.12
Fetch문을 왜 사용해야 할까?  (0) 2024.07.11
Limit 문은 언제 어떻게 쓰일까?  (0) 2024.07.10
Where 문 활용하기  (0) 2024.07.10