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
를 사용하세요.
Quiz
0 / 1
SQL EXISTS
연산자를 사용할 때, 서브쿼리는 무엇에 초점을 두나요?
`EXISTS` 연산자는 서브쿼리가 인지 확인합니다.
특정 값을 반환한다
하나 이상의 행을 반환한다
여러 열을 반환한다
0개의 행을 반환한다
학습 자료
AI 튜터
디자인
업로드
수업 노트
즐겨찾기
도움말
코드 에디터
코드 실행
코드 생성
DB 테이블 구조
실행 결과