ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ChatGPT로 데이터 분석 공부하기 #10 서브쿼리
    ChatGPT로 공부하기/데이터 분석 2024. 11. 15. 19:21

     

    서브쿼리(Subquery)는 SQL에서 하나의 쿼리 안에 포함된 또 다른 쿼리를 의미합니다. 서브쿼리는 주로 데이터를 필터링하거나 특정 조건을 설정하는 데 사용됩니다.

    1. 서브쿼리란?


    • 내부 쿼리: 서브쿼리(Subquery)는 SELECT, INSERT, UPDATE, DELETE 등 주요 SQL 명령문 안에서 사용되는 쿼리입니다.
    • 외부 쿼리: 서브쿼리를 포함하는 메인 쿼리를 의미합니다.

    기본 구조:

    SELECT 열1, 열2, ...
    FROM 테이블명
    WHERE 열3 IN (
        SELECT 열3
        FROM 다른_테이블명
        WHERE 조건
    );

    2. 서브쿼리의 유형


    (1) SELECT 문에서의 서브쿼리

    • 메인 쿼리에 필요한 데이터를 서브쿼리를 통해 제공합니다.

    예제:

    SELECT Name, Salary
    FROM Employees
    WHERE Salary > (
        SELECT AVG(Salary)
        FROM Employees
    );
    • Employees 테이블에서 평균 급여보다 높은 급여를 받는 직원들의 이름과 급여를 조회합니다.

    (2) WHERE 절에서의 서브쿼리

    • 조건절에 서브쿼리를 사용해 데이터를 필터링합니다.

    예제:

    SELECT Name
    FROM Employees
    WHERE DepartmentID = (
        SELECT DepartmentID
        FROM Departments
        WHERE DepartmentName = 'IT'
    );
    • Departments 테이블에서 DepartmentName이 'IT'인 부서의 DepartmentID를 조회하고, 해당 부서에 속한 직원들의 이름을 출력합니다.

    (3) FROM 절에서의 서브쿼리

    • 서브쿼리를 임시 테이블로 사용하여 데이터 소스로 활용합니다.

    예제:

    SELECT DepartmentName, AVG(Salary) AS AverageSalary
    FROM (
        SELECT e.DepartmentID, d.DepartmentName, e.Salary
        FROM Employees e
        INNER JOIN Departments d ON e.DepartmentID = d.DepartmentID
    ) AS Subquery
    GROUP BY DepartmentName;
    • 직원 급여와 부서 정보를 결합한 서브쿼리를 사용해, 부서별 평균 급여를 계산합니다.

    (4) EXISTS와 함께 사용하는 서브쿼리

    • EXISTS는 서브쿼리가 데이터를 반환하는지 여부를 확인합니다.

    예제:

    SELECT Name
    FROM Employees e
    WHERE EXISTS (
        SELECT 1
        FROM Departments d
        WHERE e.DepartmentID = d.DepartmentID
          AND d.DepartmentName = 'Sales'
    );
    • Sales 부서에 속한 직원들의 이름을 조회합니다.

    3. 서브쿼리의 분류


    1. 스칼라 서브쿼리:
      • 단일 값(하나의 행과 열)을 반환합니다.
      • 예: WHERE, SELECT 절에서 사용.
    2. 다중 행 서브쿼리:
      • 여러 행을 반환합니다.
      • 예: IN, ANY, ALL과 함께 사용.
    3. 다중 열 서브쿼리:
      • 여러 열을 반환합니다.
      • 예: FROM 절에서 사용.

    4. 서브쿼리의 실무 활용


    (1) 특정 조건을 만족하는 데이터 필터링

    SELECT Name
    FROM Employees
    WHERE DepartmentID IN (
        SELECT DepartmentID
        FROM Departments
        WHERE Location = 'Seoul'
    );
    • 서울에 위치한 부서에 속한 직원들의 이름을 조회합니다.

    (2) 중첩 데이터 계산

    SELECT Name, Salary
    FROM Employees
    WHERE Salary = (
        SELECT MAX(Salary)
        FROM Employees
    );
    • 회사에서 가장 높은 급여를 받는 직원의 이름과 급여를 조회합니다.

    (3) 조합 데이터 생성

    SELECT e.Name, e.Salary, d.DepartmentName
    FROM Employees e
    JOIN (
        SELECT DepartmentID, MAX(Salary) AS MaxSalary
        FROM Employees
        GROUP BY DepartmentID
    ) AS Subquery d
    ON e.DepartmentID = d.DepartmentID AND e.Salary = d.MaxSalary;
    • 각 부서에서 가장 높은 급여를 받는 직원의 이름, 급여, 부서 이름을 조회합니다.

    5. 서브쿼리와 JOIN의 비교


    서브쿼리는 직관적이지만, 복잡한 데이터에서 성능이 저하될 수 있습니다. JOIN은 대규모 데이터에서 성능이 우수하며, 테이블 간 결합에 적합합니다.

     

    서브쿼리 JOIN
    이해하기 쉽고 직관적 대규모 데이터에서 성능 우수
    단일 테이블에서 활용 가능 다중 테이블 데이터 결합에 적합
    가독성이 좋음 쿼리가 복잡해질 수 있음

    서브쿼리는 데이터의 특정 조건을 필터링하거나, 중첩된 계산 및 분석을 할 때 강력한 도구로 사용됩니다. 하지만 성능이 중요한 경우 JOIN과의 비교를 통해 적절히 선택하는 것이 중요합니다.

     

     

     

     

     

     

Designed by Tistory.