AYSTORY

WHERE not exists 본문

SQLD

WHERE not exists

bye0nzn 2025. 8. 19. 14:14

WHERE NOT EXISTS는 서브쿼리 결과가 없을 때만 TRUE가 되는 조건이에요.
즉, “해당 조건을 만족하는 행이 존재하지 않을 경우”에만 결과를 반환합니다.

 

📌 기본 문법

SELECT 컬럼
FROM 테이블 A
WHERE NOT EXISTS (
    SELECT 1
    FROM 테이블 B
    WHERE A.키 = B.키
);
  • 안쪽 서브쿼리: A.키와 매칭되는 B.키가 있는지 확인
  • EXISTS → 매칭이 있으면 TRUE
  • NOT EXISTS → 매칭이 없으면 TRUE

📌 예시

EMP (사원)

EMPNO ENAME DEPTNO
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30

DEPT (부서)

DEPTNO DNAME
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS

 

쿼리

SELECT D.DEPTNO, D.DNAME
FROM DEPT D
WHERE NOT EXISTS (
    SELECT 1
    FROM EMP E
    WHERE D.DEPTNO = E.DEPTNO
);

👉 의미: EMP(사원) 테이블에 사원이 한 명도 없는 부서를 찾아라.

결과

DEPTNO DNAME
10 ACCOUNTING
40 OPERATIONS

(10번 부서와 40번 부서에는 사원이 없기 때문)

 

📌 정리

  • EXISTS : 서브쿼리에 결과가 있으면 TRUE → 행 포함
  • NOT EXISTS : 서브쿼리에 결과가 없으면 TRUE → 행 포함
  • 활용:
    • “사원이 없는 부서 찾기”
    • “주문이 없는 고객 찾기”
    • “비선호 컨텐츠가 없는 경우만 추천” (SQLD 기출 문제에서 자주 나옴)