일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- JDBC
- 데이터분석
- JSP
- 중학1-1
- html/css
- 파이썬
- 타입스크립트심화
- 정보처리기사필기
- 스프링
- 스프링프레임워크
- 디버깅
- 쇼핑몰홈페이지제작
- JSP/Servlet
- SQL
- 자바 실습
- 자바스크립트
- 상속
- 자바스크립트심화
- 자바
- 컴퓨터비전
- 혼공머신
- 정보처리기사실기
- 중학수학
- 연습문제
- 데이터베이스
- 머신러닝
- 딥러닝
- ChatGPT
- rnn
- 개발일기
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
다중행 함수와 데이터 그룹화 2 - GROUP BY와 HAVING 절 본문
오늘 새벽에 다중행 함수의 GROUP BY에 대해서 학습해 보았으나 실습할 자료도 없고 내용을 충분히 이해하지 못하고 넘어간 것 같았다. 저녁에 이 부분을 책으로 좀 더 학습하고 오늘도 3시간 이상 공부를 진행하려고 한다.
이번주에 끝내기로 한 데이터베이스 학습도 반드시 다 마칠 수 있으리라 믿는다. 할 게 너무 많다고 미리 겁 먹고 좌절하지만 않는다면 분명 해낼 수 있다.
학습 목표
- 잘 이해하지 못했던 GROUP BY 개념과 실습 문제를 풀며 확실히 이해한다.
- HAVING 절의 쓰임새와 사용방법을 익힌다.
- 처음부터 너무 완벽하게 학습하려고 하지 않고 적당히 알게 되면 넘어간다.
- 학습 도구가 마땅치 않아도 연장 탓을 하지 않고 내가 할 수 있는 것 안에서 최대한 이용해본다.
학습 시간
저녁 7시 반 ~ 8시 40분 <1시간 10분 소요>
결과 값을 원하는 절로 묶어 출력하는 GROUP BY절
열 값별로 급여의 평균값을 구하려면 각 부서 평균 값을 구하기 위해 SELECT문을 하나하나 제작해야 한다. 여러 데이터에서 의미 있는 하나의 특정 열 값별로 묶어서 출력할 때 데이터를 그룹화한다고 표현한다.
집합 연산자를 사용할 때
GROUP BY 절의 기본 사용법
GROUP BY 절에 명시하는 열은 여러 개 지정할 수 있다. 먼저 지정한 열로 대그룹을 나누고 그다음 지정한 열로 소그룹을 나눈다.
GROUP BY를 사용하여 부서별 평균 급여 출력하기
부서별로 그룹으로 묶은 다음그룹 내에서 사원 직책 열을 기준으로 다시 소그룹으로 묶어 급여 평균을 출력했다.
GROUP BY절을 사용할 때 유의점
다중행 함수를 사용하지 않은 일반 열은 GROUP BY절에 명시하지 않으면 SELECT 절에서 사용할 수 없다.
GROUP BY절에 없는 열을 SELECT절에 포함했을 때
GROUP BY절에 명시하지 않은 ENAME 열을 출력하면 이렇게 오류가 뜬다. DEPTNO를 기준으로 그룹화되어 DEPTNO 열과 AVG(SAL) 열은 한 행으로 출력되지만, ENAME 열은 여러 행으로 구성되어 각 열별 데이터 수가 달라져 출력이 불가능하다.
GROUP BY절에 조건을 줄 때 사용하는 HAVING절
HAVING절은 SELECT문에 GROUP BY 절이 존재할 때만 사용할 수 있다. 그룹화된 결과 값의 범위를 제한하는 데 사용한다.
이 부분은 정말 중요하니 선생님께서 아주 여러 번 설명을 해주셨다. 아직 암기는 되지 않았으나 이젠 FROM이 가장 먼저 실행되고 SELECT가 가장 나중에 실행된다는 것은 알 것 같다.
GROUP BY절과 HAVING절을 사용하여 출력하기
HAVING절을 추가하지 않았을 때
HAVING절을 추가했을 때
HAVING절은 출력 조건을 제한하는 조건식을 지정하는 것이다.
HAVING절을 사용할 때 유의점
조건식을 지정한다는 점에서 HAVING절이 WHERE절과 비슷하다고 생각할 수 있다. HAVING절도 WHERE절처럼 지정한 조건식이 참인 결과만 출력한다는 점에서 비슷하다. 하지만 WHERE절은 출력 대상 행을 제한하고, HAVING절은 그룹화된 대상을 출력에서 제한하므로 쓰임새는 다르다.
만약 출력 결과를 제한하기 위해 HAVING을 사용하지 않고 조건식을 WHERE절에 명시하면 SELECT문이 실행되지 않고 오류가 발생한다.
HAVING절 대신 WHERE절을 잘못 사용했을 경우
그룹 함수는 허용할 수 없다는 오류가 뜬다.
WHERE절과 HAVING절의 차이점
이 둘은 실행 순서가 다르기 때문에 사용 목적이 다르다.
WHERE절을 사용하지 않고 HAVING절만을 사용한 경우
WHERE절과 HAVING절을 모두 사용한 경우
두 번째 예제의 경우 WHERE절이 함께 실행이 되므로 3000 이하만 출력이 되었음을 알 수 있다.
GROUP BY절을 수행하기 전에 WHERE절의 조건식으로 출력 행의 제한이 먼저 이루어진다는 것을 꼭 기억하자!
실습 문제
HAVING절은 그룹에서 조건을 둘 때 많이 사용한다는 것을 알게 되었다.
학습을 마치고
이렇게 오늘 아침에 잘 이해하지 못했던 GROUP BY와 새롭게 HAVING절을 학습해 보았다. 분량은 많지 않지만 중요한 부분이라 반드시 이해하고 넘어가야 했다.
이제는 WHERE절과 HAVING절의 차이도 확실히 비교할 수 있게 되었다. 다음 포스트에서는 그룹화과 관련된 다른 함수에 대해서 학습해보려고 한다. 이 부분은 수업 시간에는 소개하지 않았으나 알고 있으면 좋을 것 같았다.
'알고리즘 및 자료 관리 > 데이터베이스' 카테고리의 다른 글
다중행 함수와 데이터 그룹화 4 - 단원 마무리 연습문제 풀기 (0) | 2024.08.21 |
---|---|
다중행 함수와 데이터 그룹화 3 - 그룹화와 관련된 여러 함수 (0) | 2024.08.21 |
다중행 함수와 데이터 그룹화 1 - 다중행 함수와 GROUP BY (0) | 2024.08.21 |
데이터 처리와 가공을 위한 오라클 함수 4 - 단원 연습문제 풀기 (0) | 2024.08.21 |
데이터 처리와 가공을 위한 오라클 함수 3 - 형 변환 함수와 NULL 처리 함수, 조건 함수 (0) | 2024.08.21 |