학습 자료

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를 사용하세요.

Quiz
0 / 1

SQL EXISTS 연산자를 사용할 때, 서브쿼리는 무엇에 초점을 두나요?

`EXISTS` 연산자는 서브쿼리가 인지 확인합니다.
특정 값을 반환한다
하나 이상의 행을 반환한다
여러 열을 반환한다
0개의 행을 반환한다

학습 자료

AI 튜터

디자인

업로드

수업 노트

즐겨찾기

도움말

코드 에디터

코드 실행
코드 생성

DB 테이블 구조

실행 결과