MySQL Subqueries


서브쿼리(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 쿼리 내에서 다른 쿼리의 결과를 기반으로 데이터를 처리할 수 있는 강력한 도구입니다. 스칼라 서브쿼리는 단일 값을 반환하여 조건을 평가하는 데 사용되며, 인라인 뷰는 서브쿼리의 결과를 임시 테이블처럼 사용하여 복잡한 데이터 분석을 가능하게 합니다. 이러한 서브쿼리의 적절한 활용은 데이터베이스 쿼리 작성의 효율성을 높이고, 복잡한 데이터 추출 작업을 간소화하는 데 도움을 줍니다.


Leave a Reply

Your email address will not be published. Required fields are marked *