공통점
SQL에서 WHERE와 HAVING은 모두 "조건절"이다. 검색의 대상이 되는 테이블(FROM 테이블명)의 튜플(행) 중 설정한 조건에 맞는 값만 불러오도록 명령한다.
차이점
1) GROUP BY 필수 여부
- HAVING절은 GROUP BY 절의 결과로 나타나는 그룹을 제한하는 역할을 한다. 따라서, GROUP BY절이 없는 상태에서 HAVING을 사용할 수 없다.
- 그에 반해, WHERE 절은 GROUP BY가 없이도 사용 가능하다.
2) 속성/집계값
- HAVING절은 GROUP BY로 그룹핑한 결과값을 제어하는 역할을 하기 때문에, 입력값도 마찬가지로 집계값을 입력하여야 한다.
- WHERE절의 입력값은 단일 속성(컬럼명)만 가능하다.
3) 예시
-- 테스트 테이블 생성
CREATE TABLE Orders (
orderid INT PRIMARY KEY,
custid INT REFERENCES Customer(custid),
bookid INT REFERENCES Book(bookid),
saleprice INT,
orderdate DATE
);
-- 주문(Orders) 테이블의 책값은 할인 판매를 가정함
INSERT INTO Orders VALUES (1, 1, 1, 6000, '2021-07-01');
INSERT INTO Orders VALUES (2, 1, 3, 21000, '2021-07-03');
INSERT INTO Orders VALUES (3, 2, 5, 8000, '2021-07-03');
INSERT INTO Orders VALUES (4, 3, 6, 6000, '2021-07-04');
INSERT INTO Orders VALUES (5, 4, 7, 20000, '2021-07-05');
INSERT INTO Orders VALUES (6, 1, 2, 12000, '2021-07-07');
INSERT INTO Orders VALUES (7, 4, 8, 13000, '2021-07-07');
INSERT INTO Orders VALUES (8, 3, 10, 12000, '2021-07-08');
INSERT INTO Orders VALUES (9, 2, 10, 7000, '2021-07-09');
INSERT INTO Orders VALUES (10, 3, 8, 13000, '2021-07-10');
-- WHERE절만 사용
SELECT
custid
FROM ORDERS
WHERE saleprice >= 8000
-- WHERE/ HAVING절 동시 사용
SELECT
custid
,COUNT(*) AS 구매수량
FROM ORDERS
WHERE saleprice >= 8000
GROUP BY custid
HAVING COUNT(*) >=2;
참고: SQL Server로 배우는 데이터베이스 개론과 실습 2판(박우창, 남송휘, 이현룡/ 한빛아카데미)
'개발 & IT & 데이터분석' 카테고리의 다른 글
[DB] ER 모델과 ER표기법(IE 표기법) (0) | 2021.09.11 |
---|---|
[DB] 릴레이션의 구성(스키마와 인스턴스) (0) | 2021.08.29 |
Tomcat 8080 port 에러 해결방법 (0) | 2021.08.18 |
[IT 채용분석] 네카라쿠배 서버개발자 경력 채용공고 살펴보기(3편: 쿠팡) (0) | 2021.08.17 |
[IT 채용분석] 네카라쿠배 서버개발자 경력 채용공고 살펴보기(2편: 카카오) (0) | 2021.08.17 |
[IT 채용분석] 네카라쿠배 서버개발자 경력 채용공고 살펴보기(1편: 네이버, 라인) (0) | 2021.08.15 |
왕초보 파이썬, 머신러닝 독학하기 좋은 사이트 추천 (0) | 2021.02.18 |
파이썬 웹크롤링 : 인스타 해시태그 수집/분석하기 - 수집편 (0) | 2020.12.07 |
댓글