서브쿼리(subquery)는 SQL문을 실행하는 데 필요한 데이터를 추가로 초회하기 위해 쿼리 내부에 포함되어 있는 SELETE 문을 의미한다.

서브쿼리를 포함하고 있는 쿼리를 메인쿼리(main query)라고 부르며,
(subquery = inner query / main query = outer query)

서브쿼리는 반드시 괄호(())로 감싸져 있어야 한다.

서브쿼리의 특징

  • 알려지지 않은 기준을 이용한 검색에 유용
  • 메인 쿼리가 실행되기 이전에 한번만 실행
  • 한 문장에서 여러번 사용 가능
SELECT * 
FROM employee
WHERE 급여 >
(SELECT 급여 FROM employee WHERE 이름='John');

사원 John의 급여보다 높은 사원을 조회하고 싶을 때
→ 사원 John의 급여를 알지 못해도, 서브쿼리를 이요하여 검색 가능

서브쿼리 사용시 주의사항

  1. 서브쿼리는 괄호와 함께 사용되어야 한다.
  2. 서브쿼리 안에서 ORDER BY 절은 사용할 수 없다.
  3. 서브쿼리는 연산자의 오른쪽에 사용되어야 한다.
  4. 서브쿼리는 오로지 SELECT문으로만 작성 할 수 있다.

서브쿼리의 분류

반환 값의 개수에 따라

  • 단일 행 서브쿼리 (1개)

    • =, <>, <, >, <=, >=
  • 다중 행 서브쿼리 (2개 이상)

    기호 예시
    IN 하나라도 만족하면 반환 1 IN(1, 2, 3, 4)
    ANY 하나라도 만족하면 반환
    비교 연산 가능
    10 < ANY(1, 2, 3, 4)
    ALL 모두 만족하면 반환
    비교 연산 가능
    99 >= ALL(99, 100, 101)

서브쿼리의 위치에 따라

  • 일반 서브쿼리 (WHERE)

  • 스칼라 서브쿼리 (SELECT)

    SELECT 절에서 사용하는 서브쿼리, 스칼라 서브쿼리는 오로지 한 행만 반환한다. 마치 JOIN을 사용한 것과 같은 결과를 나타낸다.

     SELECT students.name, ( SELECT math
       FROM middle_test as m
       WHERE m.student_id = students.student_id
    ) AS middle_avg
    FROM students;
    

댓글남기기