SQL 기본 및 활용

18. 서브쿼리 — SQLD, 위치별 종류와 다중행 연산자 함정

CBT 전자문제집 편집팀
#SQLD#서브쿼리#스칼라서브쿼리#인라인뷰#ANY#ALL

서브쿼리(Subquery)다른 SQL 안에 들어간 SELECT 문 입니다. "어디에 놓이는지(위치)"와 "몇 행을 반환하는지(연산자)"를 정확히 구분하는 게 시험의 핵심입니다.

이 단원, 시험에서 어디에 나오나

  • 제2과목 「SQL 기본 및 활용」의 빈출 단원입니다.
  • 위치별 종류, 행수별 연산자, 그리고 단일행 연산자에 다중행이 오는 오류(ORA-01427) 가 단골입니다.

① 위치별 종류 — 어디에 놓이나

서브쿼리 위치별 종류 도식. SELECT의 스칼라, FROM의 인라인뷰, WHERE의 중첩 서브쿼리

그림 1. SELECT=스칼라, FROM=인라인뷰, WHERE=중첩. 위치로 종류가 나뉩니다. (자작 도식)

위치종류특징
SELECT스칼라 서브쿼리1행 1열 만 반환
FROM인라인 뷰표처럼 사용(별칭)
WHERE중첩 서브쿼리조건에 사용
  • 상관 서브쿼리: 메인쿼리의 컬럼을 참조해 행마다 다시 평가(주로 EXISTS 와 결합).

② 행수별 연산자 — 단일행 vs 다중행

서브쿼리가 몇 행을 반환하느냐 에 따라 쓰는 연산자가 다릅니다.

행수별 연산자 도식. 단일행은 등호 부등호, 다중행은 IN·ANY·ALL·EXISTS, 단일행 연산자에 다중행이 오면 ORA-01427 오류

그림 2. 단일행==,<,>, 다중행=IN·ANY·ALL·EXISTS. 단일행 연산자에 여러 행이 오면 오류입니다. (자작 도식)

  • 단일행 서브쿼리(1행): =, <, >, <=, >=, <>
  • 다중행 서브쿼리(여러 행): IN, ANY, ALL, EXISTS

③ ANY · ALL 의 의미

  • > ANY (집합): 집합의 최솟값보다 크면 참(하나라도 만족).
  • > ALL (집합): 집합의 최댓값보다 크면 참(전부 만족).
  • 반대로 < ANY = 최댓값 미만, < ALL = 최솟값 미만.

자주 틀리는 함정

  • = (다중행 서브쿼리)ORA-01427(단일행 하위 질의에 하나 이상의 행 반환). 다중행이면 IN 등을 써야 함.
  • NOT IN (…, NULL) → 전체가 UNKNOWN이 되어 결과 0건(전멸).
  • >ALL>ANY 혼동 — ALL=최댓값 기준, ANY=최솟값 기준.
  • 스칼라 서브쿼리가 2행 이상 반환 → 오류(1행 1열이어야 함).

한 장 정리 (암기 카드)

  • 위치: SELECT=스칼라(1행1열)·FROM=인라인뷰·WHERE=중첩.
  • 행수: 단일행 =,<,> / 다중행 IN·ANY·ALL·EXISTS.
  • >ANY=최솟값 초과 · >ALL=최댓값 초과.
  • 단일행 연산자에 다중행 → ORA-01427. NOT IN에 NULL 섞이면 전멸.

참고 출처

CBT 전자문제집 편집팀

자격증 개념과 기출 유형을 쉽게 정리합니다.

관련 글