Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

SQL WHERE 절과 HAVING 절의 차이점 완벽 정리

SQL로 데이터를 조회하다 보면 조건을 걸 때 WHERE 절과 HAVING 절 중 어떤 것을 사용해야 할지 헷갈리는 경우가 많습니다. 두 절 모두 '필터링' 역할을 하지만, 적용 대상과 사용 방식이 분명히 다릅니다. 이 글에서는 두 절의 핵심 차이점을 명확하게 정리해 드립니다.

WHERE 절이란?

WHERE 절은 테이블의 개별 레코드(행)를 특정 조건에 따라 필터링하는 데 사용됩니다. 주요 특징은 다음과 같습니다.

  • 특정 조건에 맞는 행만 테이블에서 추출합니다.
  • GROUP BY 절 없이도 단독으로 사용할 수 있습니다.
  • 행(row) 단위 연산에 적합합니다.
  • SUM, COUNT 같은 집계 함수를 포함할 수 없습니다.
  • SELECT뿐 아니라 UPDATE, DELETE 문에서도 사용할 수 있습니다.
  • GROUP BY 절이 쿼리에 포함된 경우, WHERE 절은 GROUP BY보다 먼저 실행됩니다.
  • UPPER, LOWER 등 단일 행 함수와 함께 사용할 수 있습니다.

HAVING 절이란?

HAVING 절은 그룹화된 결과(GROUP BY로 만들어진 그룹)를 특정 조건에 따라 필터링하는 데 사용됩니다. 주요 특징은 다음과 같습니다.

  • 그룹 단위로 조건을 적용하여 원하는 그룹만 추출합니다.
  • 반드시 GROUP BY 절과 함께 사용해야 합니다.
  • 열(column) 연산 기준으로 작동합니다.
  • SUM, COUNT 등 집계 함수를 포함할 수 있습니다.
  • SELECT 문에서만 사용할 수 있습니다.
  • GROUP BY 절 뒤에 위치합니다.
  • SUM, COUNT 등 복수 행(집계) 함수와 함께 사용할 수 있습니다.

WHERE vs HAVING 한눈에 비교하기

구분WHERE 절HAVING 절
필터링 대상개별 행(레코드)그룹화된 결과
GROUP BY 없이 사용가능불가능
집계 함수 사용불가능가능
사용 가능한 문SELECT, UPDATE, DELETESELECT만 가능
실행 순서GROUP BY 이전GROUP BY 이후

기본 문법

WHERE 절과 HAVING 절이 함께 사용되는 일반적인 SELECT 문의 구조는 다음과 같습니다.

SELECT column1, column2
FROM table1, table2
WHERE [conditions]
GROUP BY column1, column2
HAVING [conditions]
ORDER BY column1, column2;

실행 순서는 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 순입니다. 즉, WHERE 절이 먼저 행을 걸러낸 뒤 그룹화가 진행되고, 마지막으로 HAVING 절이 그룹 단위 조건을 적용합니다. 이 순서를 이해하면 두 절을 언제, 어떻게 사용해야 할지 쉽게 판단할 수 있습니다.