AYSTORY
WHERE not exists 본문
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 기출 문제에서 자주 나옴)
'SQLD' 카테고리의 다른 글
| LEFT OUTER JOIN 뒤 WHERE 절 (1) | 2025.08.19 |
|---|---|
| 사원이 없는 부서도 포함하려면? LEFT OUTER JOIN (0) | 2025.08.19 |
| LEFT OUTER JOIN의 조건절 활용 예시: 고객번호 필터링 (0) | 2025.08.19 |
| USING 쓸 때 ALIAS 사용 (0) | 2025.08.19 |
| ORACLE과 SQL Server에서의 차이 (2) | 2025.08.19 |
