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를 알아보려 한다. 감사합니다. (_ _)
'오라클' 카테고리의 다른 글
| [오라클] WITH절(Subquery Factoring) 완벽 정리 (1) | 2026.01.10 |
|---|---|
| [오라클] SELECT 서브쿼리 SELECT, FROM, WHERE 완벽 정리(서브쿼리, 스칼라 서브쿼리, 인라인 뷰) (0) | 2026.01.09 |
| [오라클] WHERE 절과 HAVING 절의 차이 (0) | 2026.01.07 |
| [오라클] 인덱스(Index) 완벽 정리 (0) | 2026.01.06 |
| [오라클] 트랜잭션(Transaction) COMMIT / ROLLBACK 완벽 정리 (0) | 2026.01.05 |