WHERE 절과 HAVING 절의 차이점
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 이상인 고객만 필터링