SQLD 2-2-1 서브쿼리

김희영·2026년 1월 21일

SQLD

목록 보기
20/27

SQL 활용

서브쿼리

-SQL 안에 있는 SQL

사용시 주의사항

  • 괄호로 감싸야 함
  • 단일행, 복수행 비교 연산자 사용 가능
  • ORDER BY 사용 불가.

-> 특정 값 계산이나 테이블 같이, WHERE에서 조건 비교용으로 활용할 수 있다.

  • 인라인 뷰 같이 쓸 떄 조인할 테이블의 기본키가 2개 이상이면 WHERE에서 조인할 때 기본키에도 2개 모두 써야함

위치

  • SELECT : GROUP BY 제외 모든 곳
  • INSERT : VALUES
  • UPDATE : SET

분류

동작방식에 따른 분류

  • 연관 서브쿼리 : 메인 쿼리의 칼럼을 가지는 서브쿼리
    -> 메인 - 서브 순서로 실행되어 메인에서 읽은 것을 서브에서 조건 확인
  • 비연관 서브쿼리 : 메인 쿼리의 칼럼을 가지지 않는 서브 쿼리
    -> 서브 실행 값을 메인에 제공용 (실행 순서는 그때그때 다름)

반환값 형태에 따른 분류

  • 단일행 서브쿼리

    • 단일행 비교 연산자와 같이 사용 (=, <, > 등)
    • 다중행 비교 연산자도 사용 가능
    • 실행 결과는 1건 이하
  • 다중행 서브쿼리

    • 다중행 비교연산자랑 같이 씀 (IN, ALL, ANY 등)
    • 단일행 비교 연산자는 사용 불가
    • 실행 결과가 여러건
  • 다중 컬럼 서브쿼리

    • 메인쿼리 조건과 비교하기 위해 사용
      -> 비교 컬럼 개수, 위치 같아야 함
    • 여러 칼럼 반환

위치에 따른 분류

  • 스칼라 서브쿼리

    • 위치 : SELECT 절
    • 반환 : 단일행, 단일 열
      -> 결과를 열처럼 사용하기 위해 씀
  • 인라인 뷰 (= 동적 뷰)

    • 위치 : FROM 절
      -> 결과를 일회성 테이블처럼 사용하려고 씀
      +) WHERE에서 조인 해야 하기 때문에 별칭 사용해야함.
  • 중첩 서브쿼리

    • 위치 : WHERE, HAVING (=조건절)
    • 반환 : 여러가지 (단일, 다중, 다중컬럼, 연관/비연관)
      -> 메인 쿼리 데이터 필터링, 비교용

HAVING 절에서의 서브쿼리

  • 그룹핑 결과에 주건 걸기용

UPDATE의 SET절에서의 서브 쿼리

  • 서브쿼리가 null 반환하지 않나 확인 필수 (null 반환하면 그대로 들어감)

NOT EXISTS와 서브쿼리

  • 서브쿼리의 결과물 제거용
    -> 메인 결과 - 서브 결과 (=차집합)

EXISTS와 서브 쿼리

  • 이쪽은 겹치는 것만 추출용
profile
내는 반드시 개발자가 되고 말것어

0개의 댓글