서브쿼리

서브쿼리는 쿼리문에서 중첩된 쿼리 블록으로서 소괄호에 묶인 SELECT 표현식입니다.

다음 SQL문에서 이 중첩된 쿼리 블록을 사용할 수 있습니다.
  • 선택
  • INSERT
  • 삭제
  • UPDATE
  • CREATE TABLE AS
  • INSERT INTO
  • SELECT INTO

임의의 깊이로 서브쿼리를 중첩시킬 수 있습니다.

서브쿼리가 포함된 상위 쿼리를 종종 수퍼 쿼리 또는 외부 쿼리라고도 합니다. 동일한 상위의 서브쿼리를 사용하면 상위 쿼리와의 조합으로 평가될 수 있는 결과 세트를 유도할 수 있습니다.

서브쿼리는 다음 범주로 추가 분할될 수 있습니다.
행 서브쿼리
하나의 행(또는 0개의 행)과 복수 컬럼을 리턴하며, SELECT 목록 또는 조건식에서 발생할 수 있습니다(예: 비교 연산자의 인수로서).
테이블 서브쿼리
복수 행(0 - n개 행)과 복수 컬럼을 리턴하며, FROM절에 또는 EXISTS, IN, ANY 또는 ALL 테스트의 인수로서 존재할 수 있습니다.
예를 들어, “매출이 모든 회사 매출의 1%를 초과하는 모든 상점 나열”은 스칼라 서브쿼리를 사용하여 SQL 쿼리-내-쿼리 양식으로 작성될 수 있습니다.
   SELECT StoreId FROM Stores
   WHERE TotalSale > 0.01*
   (SELECT SUM(TotalSales) FROM Stores);

시스템은 우선 내부 서브쿼리의 매출 총계를 계산한 후에 외부 쿼리를 실행할 때 이를 사용합니다.

단일 서브쿼리
하나의 행(또는 0개 행), 하나의 컬럼 테이블의 형식으로 정확히 하나의 값만 리턴합니다.

이러한 모든 서브쿼리의 경우, 시스템은 이를 한 번만 평가하며 해당 SELECT 표현식을 계산하고 저장합니다. 수퍼 쿼리를 실행할 때 시스템은 서브쿼리 대신 계산된 값을 대체합니다.

그러나 상관 서브쿼리는 외부 쿼리로 참조(상관)하는 쿼리 내 쿼리입니다. 시스템은 상관 서브쿼리를 사용하여 외부 테이블에서 선택된 모든 행에 대해 반복하여 한번씩 서브쿼리를 평가합니다.