본문 바로가기
오라클

[오라클] EXISTS와 IN 함수 차이 비교 완벽 정리

by devlog93 2026. 1. 8.

SQL에서 조건을 작성할 때 IN절과 EXISTS절은 자주 사용된다. 두 문법 모두 조건을 만족하는 데이터만 조회한다 인데.. 목적은 같지만 판단 기준과 동작 방식이 좀 다르다. 이 차이를 이해하지 못하면 결과는 같아 보여도 성능문제가 생길 수 있다. IN절과 EXISTS절의 개념과 차이를 알아보자...!


1. IN절이란?

IN절은 지정한 값 목록 중 하나라도 일치하면 TRUE로 판단한느 조건절이다.

이 값이 목록 안에 포함되어있는지를 확인한다.

SELECT *                     -- 예제 특성상 *를 쓰겠다.
  FROM EMP
 WHERE DEPTNO IN (10, 20, 30);

DEPTNO가 10, 20, 30 중 하나라도 해당되면 조회된다. IN절의 핵심은 값 자체를 비교하는 것이다..!

📌 IN절 특징

  • 값 목록 기반으로 비교
  • 가독성이 좋고 직관적이다.
  • 비교 대상이 명확할 때 사용하기 좋다.

2. EXISTS절이란?

EXISTS절은 조건을 만족하는 행이 존재하는지만 확인하는 것이다. 값이 무엇인지는 중요하지 않다.

있다 / 없다만 판단함...!

SELECT *
  FROM EMP A
 WHERE EXISTS (
               SELECT 1
                 FROM DUAL
                WHERE 1 = 1
               );

이 예제에서 중요한 것은 조건을 만족하는 행이 존재하는지 여부이다. 

📌 EXISTS절 특징

  • 값 비교 X 존재 여부 판단 O
  • 조건 만족 시 TRUE

3. IN절과 EXISTS절의 차이

구분 IN 절 EXISTS 절
판단 기준 값이 포함되어 있는지 행이 존재하는지
비교 대상 값 목록 조건 만족 여부
관심사 존재 여부
사용 목적 명확한 값 비교 조건 충족 확인

4. 언제 어떤 것을 써야 할까?

  • 비교할 값이 명확할 때는 -> IN
  • 조건을 만족하는 데이터가 있는지 확인할 때 -> EXISTS

IN절은 내부에 NULL이 포함될 경우 예상과 다른 결과가 나올 수 있다. 주의하자...!!!


마무리

IN절과 EXISTS절은 문법만 보면 비슷해 보이지만 실제로는 SQL이 조건을 판단하는 기준이 다르다는 것을 알 수가 있다. IN절은 값을 기준으로 비교하는 문법이고 비교 대상이 명확하다. 조건이 단순하고 포함이 되는지 확인할 때 아주 직관적이다. EXISTS절은 값에는 관심이 없고 조건을 만족하는 행이 존재하는지만 판단하기 때문에 논리가 복잡해질수록 조건이 많아질수록 강점?을 가진다. 중요한 것은 IN절이 무조건 좋다 EXISTS이 무조건 좋다 이게 없는 것 같다. 상황에 맞게 잘 쓰면 좋을 것 같다. 다음 시간에는 NOT IN NO EXISTS를 알아보려 한다. 감사합니다. (_ _)