기억 저장소

클라우드 기반 인공지능 개발과 DevOps 실무

MYSQL

[MySQL] WHERE,HAVING, IN 차이점

하늘.98 2023. 10. 14. 19:08

where 과 having 의 가장 큰 차이는 

group by를 이용할 시 group by보다 앞에 사용하냐 후의 사용하는 차이가 있다.

where 의 경우 group by 하기전 먼저 사용되며

having의 경우 group by를 사용 후 사용된다.

 

내 생각으로는

group by를 사용하는 경우 조건을 먼저 찾지않고 having 을 후에 사용하여 데이터를 놓치지 않을꺼 같다는 생각을 하였다.

두개의 테이블을 사용하는 경우 where 절 과 group by 테이블을 연결해 준뒤 having으로 조건을 찾으면 될꺼같다. 

where의 경우 group by 를 사용하지 않고 한 테이블에서 찾을 때 먼저 조건을 걸기 때문에 사용하면 좋을 것 같다고 생각한다.

 

WHERE

where은 sql의 가장 기본 문법 중 하나라고 할 수 있다.
SELECT * FROM student WHERE gpa >= 3.5;라고 하면, student테이블에서 gpa가 3.5이상이라는 조건을 만족하는 행을 찾아줘!라는 뜻이다.

HAVING

having은 group by와 함께 쓰이며 기능은 where과 동일하다. group by와 같이 쓰이므로
SELECT * FROM student GROUP BY grade HAVING gpa >= 3.5;는
student 테이블에서 grade(학년)별로 그룹을 묶고, gpa가 3.5이상인 행이 포함된 행을 찾는다.

where은 모든 절에 대해서 조건을 만족하는지 검사하지만, having은 그룹 내에서 조건을 만족하는지 검사한다.

IN

SELECT * FROM student WHERE grade IN (3,4);
WHERE절에서 쓰이며 OR대신 쓰인다.

위의 쿼리를 OR을 사용해서 작성하면 SELECT * FROM student WHERE grade=3 OR grage=4;이다.

 

 

 

 

예시 문제)

 

예약가능한 숙소의 정보를 담은 테이블 available이 있다.

  • available_id : PK
  • date : 예약가능한 날짜
  • price : 가격
  • room_id : 숙소 아이디
  • title : 숙소 이름

1월 1일부터 1월 5일까지 연속 5일 빌릴 수 있는 숙소의 아이디와 그 총액을 구해라

table

SELECT room_id, SUM(price) as price
FROM available
WHERE DATE(date) IN ('2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05')
GROUP BY room_id
HAVING COUNT(*) =5 ;

where과 in과 having의 적절한 조화,,,가 이루어진 문제였다. 어떻게 구현해야할지 큰 그림 (in사용과 카운트 걸기) 까지는 생각했는데 그걸 적절한 위치에 넣지 못하여 결국 풀지 못했다 ㅠㅠ

  1. where절에서 1일부터 5일까지 값을 갖고있는 행들을 추리고
  2. 그 행들을 room_id별로 그룹화한다.
  3. 그리고 그룹 별로 행의 갯수가 5개인 그룹을 선택한다!

이미 1~5일 외에 다른 날짜를 가지고 있는 행들은 걸러졌고, 행의 갯수가 5개라는말은 1일부터 5일까지의 행을 모두 갖고 있다는 말이니까!!

+) IN을 안쓰고 BETWEEN을 써도 된다!

SELECT room_id, SUM(price) as "price"
FROM available
WHERE date between "2022-01-01" and "2022-01-05"
GROUP BY room_id
HAVING count(date) >= 5;

아래 링크를 참조하여 만들었습니다.

https://velog.io/@kekim20/MySQL-WHEREHAVING-IN-%EC%B0%A8%EC%9D%B4%EC%A0%90

 

[MySQL] WHERE,HAVING, IN 차이점

where, having, in의 사용법과 차이점 with 코테 리뷰

velog.io