본문 바로가기
카테고리 없음

[SQL] NOT EXISTS와 NOT IN 차이점

by 솔리닉__ 2024. 2. 1.
반응형

 

데이터베이스 쿼리를 작성할 때, 특정 조건을 만족하지 않는 행을 찾고 싶을 때가 종종 있습니다. Oracle에서 이를 위한 두 가지 주요 방법이 있습니다: NOT EXISTS와 NOT IN. 이 두 방법은 유사해 보일 수 있지만, 실제로는 몇 가지 중요한 차이점이 있습니다. 이번 포스트에서는 이 두 조건의 차이점을 살펴보고 언제 각각을 사용하는 것이 좋을지 알아보겠습니다.

NOT EXISTS란 무엇인가요?

NOT EXISTS는 하위 쿼리와 함께 사용되는 SQL 조건입니다. 이 조건은 하위 쿼리가 단 한 개의 행도 반환하지 않을 때 참(true)이 됩니다. 다시 말해, 주 쿼리의 행이 하위 쿼리의 어떤 행과도 일치하지 않을 때 사용됩니다.

 

SELECT * FROM employees e
WHERE NOT EXISTS (
  SELECT 1 FROM department d WHERE e.department_id = d.id
);

 

위 예제에서는 부서 ID가 부서 테이블에 존재하지 않는 직원들을 찾습니다.

NOT IN의 사용

반면에, NOT IN은 지정된 값의 목록 또는 하위 쿼리의 결과에 포함되지 않는 항목을 필터링할 때 사용됩니다.

 

SELECT * FROM employees
WHERE department_id NOT IN (SELECT id FROM department);

 

이 경우, 부서 테이블에 없는 부서 ID를 가진 직원들을 찾습니다. 하지만 중요한 점은, 하위 쿼리에서 NULL 값이 하나라도 포함되어 있으면, NOT IN은 예상치 못한 결과를 반환할 수 있다는 것입니다.

주요 차이점

  1. NULL 값 처리: NOT EXISTS는 하위 쿼리에 NULL 값이 있어도 영향을 받지 않지만, NOT IN은 NULL 값이 포함되면 제대로 작동하지 않을 수 있습니다.
  2. 퍼포먼스: 일반적으로 NOT EXISTS가 NOT IN보다 더 효율적입니다, 특히 연관된 하위 쿼리를 사용할 때 더욱 그렇습니다.

언제 어느 것을 사용해야 할까요?

데이터셋에 NULL 값이 포함될 가능성이 있거나, 최적화된 퍼포먼스가 필요할 때는 NOT EXISTS를 사용하는 것이 좋습니다. 하지만, 간단한 목록이나 고정된 값들을 비교할 때는 NOT IN이 더 직관적일 수 있습니다.

데이터베이스 쿼리는 때때로 복잡하고 예상치 못한 결과를 가져올 수 있습니다. 따라서, 어떤 조건을 사용할지 결정할 때는 데이터의 특성을 잘 이해하고, 가능한 모든 경우를 고려해야 합니다. 효율적이고 정확한 쿼리를 작성하는 것이 데이터 관리의 핵심입니다.

반응형

댓글