EXISTS와 NOT EXISTS
EXISTS
와 NOT EXISTS
연산자는 서브쿼리가 어떠한 행이라도 반환하는지를 확인할 때 사용합니다.
서브쿼리가 무엇을 반환하는지는 중요하지 않고, 반환된 행이 하나라도 있는지만 확인합니다.
Syntax
EXISTS
와 NOT 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 EXISTS
는user_courses
에 일치하 는 행이 하나도 없는 사용자만 반환합니다.
왜 EXISTS를 사용할까?
- 대규모 또는 상관 서브쿼리에서
IN
보다 더 효율적 - 존재/부재 여부 확인에 최적
- 권한 필터, Join, 비즈니스 로직에서 가독성이 뛰어남
Tip: 특정 값 자체보다 행의 존재 여부가 중요할 때
EXISTS
를 사용하세요.
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!