SQL 기본 및 활용
🗄️ SQLSQL 활용★★★★★거의 매회

EXISTS·ANY·ALL — 있는지만 보거나, 하나라도·전부

EXISTS 는 행이 하나라도 있는지만 보고, ANY 는 여럿 중 하나라도 만족하면, ALL 은 전부 만족해야 참이다.

EXISTSNOT EXISTSANYALLNOT IN

왜 그런지까지

EXISTS 는 서브쿼리가 무엇을 뽑는지 보지 않고 행이 있는지만 확인하므로 SELECT 1 을 써도 된다. 한 건만 찾으면 멈추기 때문에 IN 보다 유리한 경우가 많다.

ANY 는 '> ANY(집합)' 이면 최솟값보다 크면 참, ALL 은 '> ALL(집합)' 이면 최댓값보다 커야 참이다. 여기서 가장 잘 틀리는 자리는 NOT IN 이다 — 집합에 NULL 이 하나라도 섞이면 NOT IN 의 결과는 참이 되지 못해 행이 통째로 사라진다. NOT EXISTS 는 그런 문제가 없다.

돌려 보기

사원이 한 명이라도 있는 부서만 고른다. EXISTS 를 NOT EXISTS 로 바꾸면 빈 부서가 나온다.

헷갈리는 것

ANY vs ALL

'> ANY' 는 집합의 최솟값보다 크면 참이고, '> ALL' 은 집합의 최댓값보다 커야 참이다.

NOT IN vs NOT EXISTS

NOT IN 은 비교할 집합에 NULL 이 섞이면 결과가 통째로 비어 버리지만, NOT EXISTS 는 그 영향을 받지 않는다.

확인 문제

넣어 두면 오늘 · 1일 · 3일 · 7일 · 14일 · 30일 간격으로 다시 물어봅니다