2025-08-27 23:49

Tags: SQL

서브쿼리

  • 쿼리 안에 쿼리로 하나로만 가져오기 어려운 상황에서 사용

  • 스칼라 서브쿼리 (Scalar Subquery)

    • 단 하나의 값(하나의 행, 하나의 열)을 반환하는 서브쿼리
    • SELECT 절, WHERE 절, HAVING 절 등 단일 값이 들어갈 수 있는 대부분의 위치에서 사용
      SELECT
          name,
          salary,
          salary - (SELECT AVG(salary) FROM employees) AS salary_difference
      FROM
          employees;
  • 인라인 뷰 (Inline View)

    • 테이블 형태의 결과(여러 행, 여러 열)를 반환하는 서브쿼리
    • 주로 FROM 절에서 사용. FROM 절에 테이블 이름 대신 서브쿼리를 사용하여, 마치 하나의 테이블처럼 다룰 수 있음
      SELECT
          d.department_name,
          e_avg.avg_salary
      FROM
          departments d
      JOIN
          (SELECT department_id, AVG(salary) AS avg_salary
           FROM employees
           GROUP BY department_id) AS e_avg
      ON
          d.department_id = e_avg.department_id;
  • 중첩 서브쿼리 (Nested Subquery)

    • 주로 WHERE 절에서 다른 연산자(IN, NOT IN, EXISTS, ANY, ALL 등)와 함께 사용되어, 조건절의 일부로 작동하는 서브쿼리
    • WHERE 절, HAVING 절에서 조건 비교를 위해 사용
  • 성능은 보통 조인 문이 더 좋은 경향 있지만 가독성과 의도를 표현하기엔 서브쿼리가 나을때도 있다