WHERE 절과 HAVING 절의 순서에 대하여

2024. 12. 18. 16:22·Back End/DataBase

⭐️ WHERE 절 VS HAVING 절

GROUP BY 절을 배우게 되면서 HAVING 절을 배우게 되었다.

근데 문제가 있다‼️   🧐 WHERE 절과 HAVING 절이 동작하는 것이 비슷한 것이다.

하지만 결과 값이  WHERE절과 HAVING 절이 다르게 나오는 것이다.

 

⭐️ GROUP BY 절에 WHERE 절이 사용될 경우

 

우선 아래 WHERE절이 있는 GROUP BY 코드를 보겠다.

-- 각 부서별 평균 급여가 300만원 이상인 부서들만 조회 (부서코드 , 평균 급여)

SELECT DEPT_CODE , ROUND(AVG(SALARY)) 
FROM EMPLOYEE e  
WHERE SALARY >= 3000000 
GROUP BY DEPT_CODE;

 

위의 코드의 경우 순서가 어떻게 될까 ? 

 

SELECT DEPT_CODE , ROUND(AVG(SALARY)) -- 4
FROM EMPLOYEE e   -- 1
WHERE SALARY >= 3000000 -- 2
GROUP BY DEPT_CODE;   -- 3

 

WHERE 절을 사용한 경우

 

 

위와 같이

1. FROM 절로 테이블 가져온다.

2. WHERE 절로 급여가 300만 이상만 선택한다

3. GROUP BY 절로 DEPT_CODE 를 그룹화 시킨다

4. DEPT_CODE 와 부서별 평균 급여를 보여준다.

 

🔥 하지만 여기서 문제가 있다 .

 

 각 부서별 평균 급여가 300만원 이상인 부서들만 조회 (부서코드 , 평균 급여)  ➡️  조회 해야 할 내용과 좀 다르다 ‼️

 

⭐️ 위와같이 WHERE 절을 사용하여 조건을 넣을 시 ⭐️

1. 급여가 300만원 이상이라는 조건을 주고

2. 그룹화 하고

3. 그룹화 한 그룹의 부서코드와 평균 급여가 나오게 된다.

 

-> 원하는 코드는 부서별 평균 급여가 300만원 이상인 부서를 조회하는것이지 , 먼저 300만원 이상인 부서들의

평균을 구하는것이 아니다 ‼️

 

쉽게 말해 평균이 300만원 이상인 부서를 먼저 선택하고 그룹으로 묶냐 , 그룹으로 먼저 묶고 300만원 이상의 평균을 

찾냐 그 차이다 .

 

⭐️ 그러면 어떻게 해야 원하는 코드를 만들 수 있을까 ?

     -> HAVING 절을 사용 하면 된다 👍

 


⭐️ GROUP BY 절에 HAVING 절이 사용될 경우

 

HAVING 절을 사용한 코드를 보자.

SELECT DEPT_CODE , ROUND(AVG(SALARY)) -- 4
FROM EMPLOYEE e   -- 1
GROUP BY DEPT_CODE   -- 2
HAVING AVG(SALARY) >= 3000000; -- 3

 

HAVING 절을 사용한 경우

 

위와 같이

1. FROM 절로 테이블 가져온다. (WHERE 절과 동일)

2. GROUP BY 절로 DEPT_CODE 를 그룹화 시킨다 (WHERE절과 순서가 다름)

3. HAVING 절로 평균 급여가 300만 이상인 부서를 선택한다.

4. DEPT_CODE 와 부서별 평균 급여를 보여준다.

 

-> 원하는 값을 얻게 되었다 ✨

 

🔥 이렇게 WHERE 절과 HAVING 절을 사용할 시 순서의 차이가 있을 뿐더러 , 결과의 차이도 생기게 된다 ‼️

 


⭐️ SELECT 문의 전반적 순서

 

SELECT 문의 순서는 아래와 같다. 중요 ‼️

SELECT * -- 5
FROM 테이블 -- 1
WHERE 조건식 -- 2
GROUP BY 그룹의 기준이 되는 컬럼 | 조건식 -- 3
HAVING 조건식  -- 4
ORDER BY 정렬기준 컬럼 -- 6
(오라클에는 존재 X LIMIT)

 

 


 

SELECT 문의 순서가 헷갈릴 수도 있지만 자주 보다보면 익숙해 질 것이다 ⭐️

 

'Back End > DataBase' 카테고리의 다른 글

Inline View (인라인뷰)에 대하여  (0) 2024.12.20
JOIN에 대하여  (4) 2024.12.18
LIKE 연산자와 와일드 카드 패턴에 대하여  (8) 2024.12.18
SQL 구문 순서에 대하여  (0) 2024.12.18
SELECT에 대하여  (0) 2024.12.17
'Back End/DataBase' 카테고리의 다른 글
  • Inline View (인라인뷰)에 대하여
  • JOIN에 대하여
  • LIKE 연산자와 와일드 카드 패턴에 대하여
  • SQL 구문 순서에 대하여
KoesJin
KoesJin
hEELo
  • KoesJin
    Seok DevLog
    KoesJin
  • 전체
    오늘
    어제
    • 분류 전체보기 (109)
      • Back End (31)
        • DataBase (15)
        • JAVA (12)
        • JDBC (4)
      • Front End (9)
        • HTML5 & CSS (3)
        • Java Script (6)
        • REACT (0)
      • Server (9)
        • JSP - TomCat - Servlet (7)
        • Spring Boot (2)
      • GitHub (1)
      • IT 지식 (기술면접 대비) (20)
      • Weekly TIL (39)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    weekly til - day 40
    MVC 패턴
    select
    where
    weekly til - day 41
    dml
    weekly til - day 38
    DDL
    순서에 대하여
    order by
    INNER JOIN
    weekly til - day 43
    weekly til - day 39
    DAO
    exception
    from
    View
    css
    GC
    commit
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
KoesJin
WHERE 절과 HAVING 절의 순서에 대하여
상단으로

티스토리툴바