이 글에서 꼭 잡아야 할 것
상호연관 서브쿼리는 바깥 질의의 각 행이 안쪽 질의에 영향을 준다. 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개를 모아 두었습니다. 바로 앞뒤 문맥을 이어서 읽고 싶을 때 가장 편합니다.
SELF JOIN, CROSS JOIN, 비등가 조인
조인은 같은 테이블을 다시 붙일 수도 있고, 범위 조건으로 연결할 수도 있다. SELF JOIN, CROSS JOIN, 비등가 조인은 조인 개념을 깊게 이해했는지 확인하는 좋은 주제다.
서브쿼리 기본: 단일행 서브쿼리 읽는 법
서브쿼리는 하나의 질의 안에서 다른 질의를 이용하는 문법이다. 먼저 한 값을 구하고, 그 값을 바탕으로 바깥 질의를 실행하는 단일행 서브쿼리부터 이해하면 전체 구조가 쉬워진다.
다중행 서브쿼리와 IN, ANY, ALL
서브쿼리 결과가 여러 행이 되는 순간 비교 연산자 선택이 달라진다. IN, ANY, ALL을 정확히 구분하면 다중행 서브쿼리 문제를 안정적으로 풀 수 있다.
SET 연산자: UNION, UNION ALL, INTERSECT, MINUS
SET 연산자는 여러 SELECT 결과를 집합처럼 합치거나 비교하는 문법이다. 결과 구조가 같아야 하며, 중복 제거 여부를 정확히 구분하는 것이 핵심이다.
CASE와 DECODE로 조건 분기하기
조건 분기는 데이터를 사람이 읽기 좋은 형태로 바꾸는 핵심 기술이다. 표준 SQL의 CASE와 오라클 고유 함수 DECODE를 함께 익히면 문제 해석 폭이 넓어진다.
댓글을 불러오는 중입니다.