서브쿼리의 힘: 하위 쿼리를 활용한 복잡한 데이터 추출

2023. 11. 13. 19:26개발 문서/SQL

728x90
반응형

서브쿼리(subquery)는 하위 쿼리로, 다른 쿼리 안에서 사용되는 쿼리입니다. 서브쿼리는 주로 복잡한 데이터 추출이나 조건에 따른 필터링에 사용됩니다. 서브쿼리는 SELECT, FROM, WHERE, HAVING, 등 다양한 SQL 문에서 사용될 수 있습니다.

다음은 몇 가지 서브쿼리의 예시입니다:

  1. SELECT 문에서의 서브쿼리:

     SELECT column1, column2, ...
     FROM table_name
     WHERE column_name operator (SELECT column_name FROM another_table WHERE condition);

    예를 들어, "employees" 테이블에서 특정 부서의 평균 급여보다 높은 급여를 받는 직원을 찾고자 할 때:

     SELECT employee_id, first_name, last_name, salary
     FROM employees
     WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = 10);
  2. FROM 절에서의 서브쿼리:

     SELECT column1, column2, ...
     FROM (SELECT column_name FROM table_name WHERE condition) AS alias_name;

    예를 들어, 각 부서별로 가장 높은 급여를 받는 직원을 찾고자 할 때:

     SELECT department_id, MAX(salary) AS max_salary
     FROM employees
     GROUP BY department_id;
    
     -- 이를 기반으로 각 부서의 최고 급여를 가진 직원 찾기
     SELECT e.employee_id, e.first_name, e.last_name, e.salary
     FROM employees e
     JOIN (
         SELECT department_id, MAX(salary) AS max_salary
         FROM employees
         GROUP BY department_id
     ) subquery ON e.department_id = subquery.department_id AND e.salary = subquery.max_salary;
  3. IN 연산자를 사용한 서브쿼리:

     SELECT column1, column2, ...
     FROM table_name
     WHERE column_name IN (SELECT column_name FROM another_table WHERE condition);

    예를 들어, 특정 부서에 속한 직원들을 찾고자 할 때:

     SELECT employee_id, first_name, last_name
     FROM employees
     WHERE department_id IN (SELECT department_id FROM departments WHERE department_name = 'IT');

서브쿼리를 적절히 활용하면 데이터 추출과 필터링을 더욱 정확하고 효과적으로 수행할 수 있습니다.