728x90
이슈)
쿼리를 보다 보면, EXISTS 구문이 있다.
말 그래도 존재 여부를 따지는 문법인데, 가끔 보면 이상하게 정리가 안될 때가 있다.
그래서 한번 정리를 해본다.
EXISTS란?
→ 서브쿼리의 결과 존재 여부를 판단하여 메인 쿼리의 결과를 제어하는 조건문
→ 즉, EXISTS는 서브쿼리의 결과가 하나라도 있으면 TRUE 없으면 FALSE를 반환
※ NOT EXISTS → 반대로 존재하지 않는 경우만 찾을 때 사용
SELECT 컬럼명
FROM 테이블A A
WHERE EXISTS (
SELECT 1
FROM 테이블B B
WHERE B.컬럼 = A.컬럼
);
이렇게 보면 IN과 EXISTS가 비슷하다고 볼 수 있는데, 아래 차이를 봐보자
| 구분 | EXISTS | IN |
| 비교 기준 | 존재 여부 | 값 목록 포함 여부 |
| 성능 | 서브쿼리 결과가 많아도, 첫 행을 찾으면 종료 → 큰 데이터에서 유리 | 서브쿼리 결과 전체를 비교해야 함 |
| NULL 영향 | NULL 관계없이 잘 동작 | 서브쿼리 결과에 NULL 있으면 주의 필요 |
728x90
'DB > Oracle' 카테고리의 다른 글
| [Oracle] Where절에서 괄호 우선순위가 동작하지 않는 경우 (옵티마이저) (0) | 2025.10.16 |
|---|---|
| [Oracle] WITH절이란? (기본 사용법부터 재귀적 WITH절까지) (0) | 2025.10.16 |
| [Oracle] NVL, DECODE, COALESCE (0) | 2025.10.16 |
| [Oracle] 옵티마이저 힌트 LEADING 과 INDEX_SS (0) | 2025.10.16 |
| [Oracle] INSERT 내부에 SELECT절 (0) | 2025.10.16 |