Programme/SQL

WHERE 절과 HAVING 절의 차이점

프랑스어전공 2025. 3. 1. 20:18

SQL에서 데이터를 필터링할 때 가장 많이 사용하는 두 가지 방법이 WHERE 절과 HAVING 절입니다.

이 두 절은 모두 특정 조건을 만족하는 데이터를 추출하는 역할을 하지만, 적용 방식과 위치에 차이가 있습니다.

 

1. WHERE 절 (WHERE Clause)

 

WHERE 절이란?

 

WHERE 절은 각 개별 행(row)에 대해 조건을 검사하여, 해당 조건을 만족하는 행만 필터링하는 역할을 합니다.

주로 SELECT, UPDATE, DELETE, INSERT 문에서 사용되며, GROUP BY 절이 있다면 그 이전에 위치해야 합니다.

 

WHERE 절 사용법

 

일반적으로 WHERE 절에서는 비교 연산자 (>, <, =, !=), 논리 연산자 (AND, OR, NOT),

패턴 매칭 (LIKE) 등을 사용할 수 있습니다.

 

① SELECT 문에서의 사용 예시

SELECT order_id, name
FROM customer_orders
WHERE total >= 100;

customer_orders 테이블에서 총 주문 금액(total)이 100 이상인 주문의 order_id와 name을 조회

 

② UPDATE 문에서의 사용 예시

UPDATE customer_orders
SET status = 'Shipped'
WHERE order_id = 123;

 

order_id가 123인 주문의 status를 'Shipped'로 변경

 

2. HAVING 절 (HAVING Clause)

 

HAVING 절이란?

 

HAVING 절은 GROUP BY 절과 함께 사용되며, 그룹화된 결과(집계 데이터)에 대해 조건을 필터링할 때 사용됩니다.

즉, WHERE 절이 개별 행을 필터링하는 반면, HAVING 절은 그룹(group) 단위로 조건을 적용합니다.

 

HAVING 절 사용법

 

HAVING 절은 SUM(), AVG(), COUNT() 등의 집계 함수(Aggregate Function)와 함께 사용할 수 있습니다.

또한, GROUP BY 절이 없을 경우에는 WHERE 절과 동일한 역할을 합니다.

 

① SELECT 문에서의 사용 예시

SELECT name, SUM(total) AS total_spent
FROM customer_orders
GROUP BY name
HAVING total_spent >= 100;

 

name별로 주문 총액(SUM(total))을 계산한 후, 총 주문 금액이 100 이상인 고객 그룹만 조회

 

 

3. WHERE 절 vs. HAVING 절 비교

✅ WHERE 절은 각 행(row)별로 필터링

✅ HAVING 절은 그룹(group)별로 필터링

✅ WHERE → GROUP BY → HAVING 순서로 작성

✅ 함께 사용할 수 있음

 

4. WHERE 절과 HAVING 절을 함께 사용하기

두 절은 함께 사용할 수도 있습니다.

예를 들어, 특정 날짜 이후의 주문만 조회하면서, 고객별 주문 총액이 100 이상인 경우를 찾을 수도 있습니다.

SELECT name, SUM(total) AS total_spent
FROM customer_orders
WHERE date > '2020-12-31'  -- 개별 행 필터링
GROUP BY name
HAVING total_spent >= 100;  -- 그룹 필터링

 

1. 먼저 WHERE 절을 사용해 2021년 이후의 주문만 필터링

2. GROUP BY 절로 고객별로 그룹화

3. HAVING 절을 사용해 총 주문 금액이 100 이상인 고객만 필터링