오라클 SQL · 조인과 서브쿼리

상호연관 서브쿼리와 EXISTS

상호연관 서브쿼리는 바깥 질의의 각 행이 안쪽 질의에 영향을 준다. EXISTS와 함께 익히면 “관련 데이터가 있는가”를 검사하는 문제를 매우 자연스럽게 풀 수 있다.

상호연관 서브쿼리와 EXISTS 대표 이미지

이 글에서 꼭 잡아야 할 것

상호연관 서브쿼리는 바깥 질의의 각 행이 안쪽 질의에 영향을 준다. EXISTS와 함께 익히면 “관련 데이터가 있는가”를 검사하는 문제를 매우 자연스럽게 풀 수 있다.

상호연관 서브쿼리는 “이 직원에게 주문 이력이 있는가”, “이 부서에 소속 직원이 있는가”처럼 관계 존재를 확인하는 데 강력하다. 집계보다 존재 여부가 중요할 때는 EXISTS가 읽기 쉽고 의미도 분명하다.

난이도 중급
모듈 조인과 서브쿼리
학습 시간 11분
핵심 키워드 Correlated Subquery, EXISTS, Related Row

개념 지도와 이해 포인트

행마다 달라지는 조건 상호연관 서브쿼리는 바깥 행의 컬럼을 안쪽 질의에서 참조한다. 그래서 바깥 행이 바뀔 때마다 안쪽 조건도 함께 달라진다.
존재 여부 확인 `EXISTS`는 안쪽 질의에서 한 행이라도 나오면 참이다. 개수보다 존재 여부가 중요할 때 가장 효율적인 표현이다.
해석 순서 바깥 행 하나를 잡고, 그 행과 관련된 안쪽 결과가 존재하는지 확인한다고 생각하면 구조가 잘 읽힌다.
상호연관 서브쿼리와 EXISTS 개념 다이어그램

대표 문법 패턴

SELECT d.department_id, d.department_name
FROM departments d
WHERE EXISTS (
  SELECT 1
  FROM employees e
  WHERE e.department_id = d.department_id
);

문법 읽는 포인트

  • `EXISTS`는 안쪽 SELECT 목록보다 행 존재 자체가 중요하다.
  • 상호연관 서브쿼리는 안쪽에서 바깥 질의 별칭을 참조한다.
  • 존재 여부 확인 문제는 JOIN보다 EXISTS가 더 직접적일 때가 많다.

핵심 용어

  • Correlated Subquery
  • EXISTS
  • Related Row

직원이 있는 부서만 골라 보기

JOIN으로도 풀 수 있는 문제지만, “있다/없다”가 핵심일 때는 EXISTS가 더 분명하다. 결과 행 수보다 조건 성립 여부를 먼저 읽는 습관이 중요하다.

SELECT d.department_id, d.department_name
FROM departments d
WHERE EXISTS (
  SELECT 1
  FROM employees e
  WHERE e.department_id = d.department_id
    AND e.salary >= 5000
)
ORDER BY d.department_id;

수험 체크포인트와 자주 하는 실수

시험 체크포인트

  • 상호연관 서브쿼리는 안쪽에서 바깥 별칭을 참조하는지 여부로 빠르게 구분할 수 있다.
  • `EXISTS`는 첫 행만 찾아도 참이 되므로 존재 여부 검사라는 의미를 꼭 기억하자.
  • JOIN과 EXISTS가 같은 결과를 만들 수 있는 상황을 비교해 보는 연습이 좋다.

자주 하는 실수

  • 상호연관 구조를 단순 단일행 서브쿼리처럼 읽는 실수
  • `EXISTS`가 개수를 세는 문법이라고 오해하는 실수
  • 안쪽 조건이 바깥 행마다 바뀐다는 점을 놓치는 실수

연결 학습

조인과 서브쿼리가 정리되면 이제 여러 결과 집합을 합치는 SET 연산자로 확장할 수 있다. 다음 챕터에서 UNION과 INTERSECT를 다룬다.

댓글 0

작성자 이름과 댓글 내용을 입력하면 바로 등록됩니다. 답글은 한 단계까지 지원하고, 댓글은 최대 200자까지 작성할 수 있습니다.

일반 댓글 작성

댓글을 불러오는 중입니다.

같은 카테고리에서 이어서 읽기

지금 읽은 글과 가까운 흐름의 글 5개를 모아 두었습니다. 바로 앞뒤 문맥을 이어서 읽고 싶을 때 가장 편합니다.