본문 바로가기
Everyday Study

2024.09.20 (금) { WHERE 절, HAVING 절, GROUP BY, ORDER BY }

by xogns93 2024. 9. 23.

WHERE 절, HAVING 절, GROUP BY, ORDER BY

1. WHERE 절

  • 용도: WHERE 절은 행 단위로 데이터를 필터링합니다. 즉, 데이터베이스에서 가져온 원시 데이터를 조건에 맞게 필터링하여 필요한 데이터만 남깁니다.
  • 특징: WHERE 절은 그룹화되기 전에 조건을 적용합니다. 즉, 데이터가 그룹화되기 전에 필터링이 먼저 일어납니다.
  • 예시:
    SELECT * 
    FROM Employees 
    WHERE salary > 5000;
    이 쿼리는 Employees 테이블에서 급여가 5000보다 큰 행만 가져옵니다.

2. HAVING 절

  • 용도: HAVING 절은 그룹화된 데이터에 조건을 적용합니다. 즉, GROUP BY로 그룹화된 결과에 조건을 걸어서 필터링합니다.
  • 특징: WHERE 절과 달리, HAVING 절은 집계 함수(SUM, COUNT 등)를 사용할 수 있습니다. HAVING은 그룹화된 데이터에만 적용되므로 GROUP BY와 함께 사용됩니다.
  • 예시:
    SELECT department, COUNT(*) as employee_count
    FROM Employees
    GROUP BY department
    HAVING COUNT(*) > 10;
    이 쿼리는 부서별 직원 수를 계산하고, 직원 수가 10명 이상인 부서만 반환합니다.

3. GROUP BY 절

  • 용도: GROUP BY 절은 데이터를 특정 기준으로 그룹화합니다. 주로 집계 함수와 함께 사용하여 그룹별로 요약된 데이터를 반환할 때 사용됩니다.
  • 특징: GROUP BY같은 값을 가진 행들을 하나의 그룹으로 묶어줍니다. 그런 후, 그 그룹에 대해 집계 함수(SUM, COUNT, AVG 등)를 적용할 수 있습니다.
  • 예시:
    SELECT department, AVG(salary) as avg_salary
    FROM Employees
    GROUP BY department;
    이 쿼리는 각 부서별로 직원들의 평균 급여를 계산합니다.

4. ORDER BY 절

  • 용도: ORDER BY 절은 결과를 정렬할 때 사용됩니다. 오름차순(ASC) 또는 내림차순(DESC)으로 결과를 정렬할 수 있습니다.
  • 특징: ORDER BY는 정렬하고자 하는 컬럼을 기준으로 결과를 정렬합니다. ORDER BY 절은 쿼리의 마지막에 사용됩니다.
  • 예시:
    SELECT * 
    FROM Employees 
    ORDER BY salary DESC;
    이 쿼리는 Employees 테이블에서 모든 직원을 급여 순으로 내림차순 정렬해서 보여줍니다.

주요 차이점

  1. WHERE vs HAVING:
    • WHERE그룹화 전에 데이터를 필터링하고, HAVING그룹화 후 데이터를 필터링합니다.
    • WHERE개별 행에 조건을 걸 수 있지만, HAVING집계 함수에 조건을 걸 때 사용합니다.
  2. GROUP BY vs ORDER BY:
    • GROUP BY는 데이터를 그룹화하는데 사용되며, 주로 집계 함수와 함께 사용됩니다.
    • ORDER BY는 데이터를 정렬하는 데 사용됩니다.

예시로 비교

SELECT department, COUNT(*) as employee_count
FROM Employees
WHERE salary > 5000     -- (1) 먼저 급여가 5000 이상인 행만 필터링
GROUP BY department      -- (2) 부서별로 그룹화
HAVING COUNT(*) > 10     -- (3) 그룹화된 데이터 중 직원 수가 10명 이상인 부서만 필터링
ORDER BY employee_count DESC; -- (4) 직원 수 기준으로 내림차순 정렬

이 쿼리는:

  1. 먼저 WHERE 절로 급여가 5000 이상인 직원만 필터링합니다.
  2. 그런 후, 부서별로 데이터를 그룹화합니다.
  3. 그다음 직원 수가 10명 이상인 부서만 남깁니다.
  4. 마지막으로, 직원 수 기준으로 내림차순으로 정렬합니다.

각 절의 순서와 기능을 정확히 이해하고 사용하면 복잡한 쿼리도 쉽게 작성할 수 있습니다.