본문으로 건너뛰기
실습하기

EXISTS와 NOT EXISTS

EXISTSNOT EXISTS 연산자는 서브쿼리가 어떠한 행이라도 반환하는지를 확인할 때 사용합니다.

서브쿼리가 무엇을 반환하는지는 중요하지 않고, 반환된 행이 하나라도 있는지만 확인합니다.


Syntax

EXISTSNOT EXISTS의 기본 구문은 다음과 같습니다.

기본 EXISTS 구문
SELECT ...
FROM table
WHERE EXISTS (
SELECT 1
FROM another_table
WHERE condition
);
  • EXISTS: 서브쿼리가 한 행 이상 반환하면 TRUE
  • NOT EXISTS: 서브쿼리가 0행을 반환하면 TRUE

예제 1: 강좌를 하나라도 선택한 사용자

user_courses에 강좌가 최소 한 개라도 있는 모든 사용자를 찾습니다.

EXISTS 사용
SELECT name
FROM users u
WHERE EXISTS (
SELECT 1
FROM user_courses uc
WHERE uc.user_id = u.user_id
);

WHERE 절의 서브쿼리는 users 테이블을 필터링하여, 최소 한 개의 강좌를 선택한 사용자만 포함되도록 합니다.

출력:

name
Sofia
Ethan
Aisha
Olivia
Liam

모든 사용자가 최소 한 개의 강좌를 가지고 있어 전원이 반환됩니다.


예제 2: 어떤 강좌도 수강하지 않은 사용자

강좌를 전혀 수강하지 않은 사용자를 찾으려면 NOT EXISTS를 사용합니다.

예를 들어, 서연에게 user_courses에 해당하는 행이 없다면, 쿼리는 그녀를 반환합니다.

NOT EXISTS 사용
SELECT name
FROM users u
WHERE NOT EXISTS (
SELECT 1
FROM user_courses uc
WHERE uc.user_id = u.user_id
);

출력:

name
Olivia

NOT EXISTSuser_courses에 일치하는 행이 하나도 없는 사용자만 반환합니다.


왜 EXISTS를 사용할까?

  • 대규모 또는 상관 서브쿼리에서 IN보다 더 효율적
  • 존재/부재 여부 확인에 최적
  • 권한 필터, Join, 비즈니스 로직에서 가독성이 뛰어남

Tip: 특정 값 자체보다 행의 존재 여부가 중요할 때 EXISTS를 사용하세요.

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!