심심한 개발자의 취미생활

서브쿼리

서브쿼리 개념

  • 다른 SELECT문에 삽입된 SELECT문
  • 간단한 명령문으로 강력한 기능을 제공하는 명령문 작성이 가능함
  • 테이블 자체 데이터에 종속된 조건을 사용하여 테이블에서 행을 선택할 때 유용함
  • 일반적으로 서브쿼리가 먼저 실행되고, 그 결과를 사용하여 메인쿼리에서 사용함

서브쿼리의 사용지침

  • 서브쿼리를 괄호로 묶어야 함
  • 일반적인 서브쿼리에서는 ORDER BY 절을 사용하지 않음
  • 단일 행 연산자(=, >, <, >=, <=, <>)와 복수행 연산자(IN, ANY, ALL)를 사용함

인라인뷰와 스칼라 서브쿼리

FROM절 서브쿼리

  • 서브쿼리는 FROM절에서도 사용 가능함
  • 해당 SELECT문에서만 사용 가능한 데이터를 정의함
  • FROM절에 기술한 서브쿼리는 마치 뷰와 같은 역할을 함
  • FROM절에 있는 서브쿼리는 인라인 뷰라고도 함

스칼라 서브쿼리

  • 서브쿼리 수행 결과가 한 개 ROW와 한 개 컬럼만을 반환 하는 경우임
  • 반환 값이 단일 값이 되는 서브쿼리임
  • 단일 값을 사용할 수 있는 모든 곳에 사용이 가능함
  • SELECT, ORDER BY 위치에는 스칼라 서브쿼리만 사용이 가능함

상호연관 서브쿼리

  • 메인 쿼리의 한 ROW에 대해서 서브쿼리가 한 번씩 실행됨
  • 데티블에서 행을 먼저 읽고 각 행의 값을 서브쿼리 실행시 이용함
  • 기본 질의에서 고려된 각 후보 행에 대해 서브쿼리가 닥른 결과를 반환해야 하는 경우에 사용됨
  • 서브쿼리에서 메인 쿼리의 컬럼명을 사용할 수 있으나 메인 쿼리에서는 서브쿼리의 컬럼명을 사용할 수 없음

EXISTS

  • MAIN 질의에서 검색된 값이 서브쿼리의 결과집합에 존재하는지 여부를 검사하기 위한 상호 연관 서브쿼리에 자주 사용됨
  • 서브쿼리가 하나의 행 이상 반환하면 TRUE를 반환하고, 해당 값이 없으면 FALSE를 반환함
    • 서브쿼리 행의 값이 발견되는 경우 서브쿼리에서 더 이상 검색하지 않음
    • 조건 플래그가 TRUE가 됨