[DBMS]SUBQUERY

Date:     Updated:

카테고리:

태그:

[15] SUBQUERY

15.1. 서브쿼리

  • 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다.
    • 하나의 SQL문으로 풀 수 없는, 조금 더 복잡한 데이터를 추출할 때,
  • 서브쿼리는 메인 쿼리의 컬럼을 모두 사용할 수 있지만, 메인 쿼리는 서브쿼리의 컬럼을 사용할 수 없다.
  • 서브쿼리를 괄호로 감싸서 사용한다.
  • 서브쿼리는 단일 행(SINGLE ROW)또는 복수 행(MULTIPLE ROW) 비교 연산자와 함께 사용 가능하다.
    • 단일 행(SINGLE ROW) 비교 연산자는 반드시 1건 이하여야 한다.
    • 복수 행(MULTIPLE ROW) 비교 연산자는 서브쿼리의 결과 건수와 상관없다.
  • 서브쿼리에서는 ORDER BY를 사용하지 못한다.
    • ORDER BY절은 메인 쿼리의 마지막 문제이 위치하여야 한다.
  • 서브쿼리가 사용 가능한 위치
    • SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT문의 VALUES, UPDATE문의 SET

15.2. 서브쿼리 구분

  • 중첩 서브쿼리
    • WHERE절
  • 인라인 뷰
    • FROM절
  • 스칼라 서브쿼리
    • SELECT절

15.3. 서브쿼리 구분2

  • 단일행 서브쿼리
    • 하나의 값을 리턴하는 서브쿼리이다.
    • 일반적인 연산자 모두 사용가능하다. (=, >, <, AND, OR, NOT)
  • 다중행 서브쿼리
    • 리턴 값이 여러 개의 레코드이다.
    • 결과를 처리하는 전용 연산자가 있다. (IN, ALL, ANY, EXISTS)

15.4. 연산자

  • ANY 연산자
    • 값을 서브쿼리에 의해서 반환된 값과 비교한다.
    • 서브쿼리의 값이 어떠한 값이라도 만족을 하면 조건이 성립한다.
    • 여러 개 레코드의 OR 효과
    • 메인 쿼리에서 가장 작은 값보다 큰 것만 추출한다.
  • ALL 연산자
    • 서브쿼리에 의해 반환된 값과 비교한다.
    • 서브쿼리의 모든 값이 만족을 해야만 조건이 성립된다.
    • 여러 개의 레코드의 AND효과
    • 메인 쿼리에서 가장 큰 값보다 큰 것만 추출한다.
  • IN / EXISTS 연산자
    • 서브쿼리 내에 집합이 존재하는지에 대한 존재 여부만 판단한다.
    • 결과값 중에 있는 것 중에서의 존재여부이다.
    • IN은 전체 레코드를 스캔한다. EXISTS는 존재여부만 확인하고 스캔하지 않는다.
    • 존재하면 TRUE, 존재하지 않으면 FALSE
    • 연산 시 부하가 줄어든다.

DBMS 카테고리 내 다른 글 보러가기

댓글 남기기