서브쿼리(Subquery)는 하나의 SQL 쿼리 내에 포함된 또 다른 SQL 쿼리입니다. 서브쿼리는 데이터를 필터링하거나 집계할 때 유용하며, 메인 쿼리의 WHERE 절, HAVING 절, SELECT 절 또는 FROM 절에서 사용할 수 있습니다. 서브쿼리를 사용하면 복잡한 데이터 추출 작업을 간단하게 수행할 수 있습니다.
서브쿼리의 개념과 활용 (Concept and Usage of Subqueries)
서브쿼리는 다른 쿼리의 결과를 기반으로 쿼리를 수행하는 방법으로, 메인 쿼리의 데이터를 동적으로 처리할 수 있게 합니다. 서브쿼리는 다음과 같은 상황에서 유용하게 사용됩니다:
- 특정 조건을 만족하는 데이터만 선택하고자 할 때
- 복잡한 집계 또는 계산을 수행하고자 할 때
- 데이터의 존재 여부를 확인할 때
서브쿼리는 메인 쿼리와 연관된 데이터를 추출하는 데 도움을 줍니다. 서브쿼리는 일반적으로 괄호 ()
안에 위치하며, 메인 쿼리의 SELECT, WHERE, 또는 HAVING 절에서 사용됩니다.
예제: 서브쿼리 사용
-- 직원 중에서 가장 높은 급여를 받는 직원의 정보를 조회 SELECT employee_id, employee_name, salary FROM employees WHERE salary = ( SELECT MAX(salary) FROM employees );
위의 쿼리는 employees
테이블에서 가장 높은 급여를 받는 직원의 정보를 추출합니다. 서브쿼리는 employees
테이블에서 최대 급여를 찾고, 메인 쿼리는 그 급여를 받는 직원의 정보를 반환합니다.
서브쿼리의 종류 (Types of Subqueries)
서브쿼리는 크게 두 가지로 나눌 수 있습니다: 스칼라 서브쿼리(Scalar Subquery)와 인라인 뷰(Inline View)입니다.
스칼라 서브쿼리 (Scalar Subquery)
스칼라 서브쿼리는 단일 값(single value)을 반환하는 서브쿼리입니다. 일반적으로 SELECT 문에서 하나의 값만 반환할 때 사용됩니다. 스칼라 서브쿼리는 메인 쿼리의 SELECT, WHERE 또는 HAVING 절에서 사용되며, 단일 값으로 메인 쿼리의 조건을 평가합니다.
예제: 스칼라 서브쿼리 사용
-- 가장 높은 급여를 받는 직원의 급여를 반환 SELECT salary FROM employees WHERE employee_id = 101;
위의 쿼리에서는 특정 직원의 급여를 조회하는데, 101
번 직원의 급여를 반환합니다. 서브쿼리가 단일 값을 반환하는 경우 스칼라 서브쿼리라고 할 수 있습니다.
인라인 뷰 (Inline View)
인라인 뷰는 서브쿼리가 FROM 절에 위치하여 테이블처럼 취급되는 경우를 말합니다. 인라인 뷰는 중간 결과를 제공하고 이를 메인 쿼리에서 사용할 수 있게 합니다. 인라인 뷰는 쿼리의 일부분으로서 데이터를 미리 계산하고, 결과를 임시 테이블처럼 사용하는 데 유용합니다.
예제: 인라인 뷰 사용
-- 각 부서별로 평균 급여를 계산하고 그 평균 급여가 $5000 이상인 부서의 이름을 조회 SELECT department_name, avg_salary FROM ( SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id ) AS department_avg JOIN departments ON department_avg.department_id = departments.department_id WHERE avg_salary >= 5000;
위의 쿼리는 내부 서브쿼리에서 각 부서의 평균 급여를 계산한 후, 평균 급여가 $5000 이상인 부서의 이름을 반환합니다. 내부 서브쿼리(department_avg
)는 인라인 뷰로 취급되며, 이를 메인 쿼리에서 조인하여 최종 결과를 생성합니다.
결론 (Conclusion)
서브쿼리는 SQL 쿼리 내에서 다른 쿼리의 결과를 기반으로 데이터를 처리할 수 있는 강력한 도구입니다. 스칼라 서브쿼리는 단일 값을 반환하여 조건을 평가하는 데 사용되며, 인라인 뷰는 서브쿼리의 결과를 임시 테이블처럼 사용하여 복잡한 데이터 분석을 가능하게 합니다. 이러한 서브쿼리의 적절한 활용은 데이터베이스 쿼리 작성의 효율성을 높이고, 복잡한 데이터 추출 작업을 간소화하는 데 도움을 줍니다.