반응형
DBMS - Oracle Database
VERSION - Oracle Database 11g Release 2
IDE - SQL Developer
실습용 데이터를 입력하지 않고, 오라클 데이터베이스를 설치하면 기본으로 제공되는 테이블과 계정들로 학습한 내용입니다.
※ 하나의 열에 출력 결과를 담는 다중행 함수
1. 합계를 구하는 SUM 함수
SELECT SUM(COMM)
FROM EMP;
2. 데이터 개수를 구해주는 COUNT 함수
SELECT COUNT(*) FROM EMP
WHERE DEPTNO = 30;
3. 최댓값과 최솟값을 구하는 MAX, MIN 함수
SELECT MAX(SAL) FROM EMP
WHERE DEPTNO = 10;
SELECT MIN(SAL) FROM EMP
WHERE DEPTNO = 10;
4. 평균 값을 구하는 AVG 함수
SELECT AVG(DISTINCT SAL) FROM EMP
WHERE DEPTNO = 30;
※ 결과 값을 원하는 열로 묶어 출력하는 GROUP BY절
1. GROUP BY를 사용하여 부서번호 및 직책별 평균 급여 출력하기
특정 열 또는 데이터를 기준으로 데이터를 그룹으로 묶는다.
SELECT DEPTNO, JOB, AVG(SAL) FROM EMP
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;
결과 >>
GROUP BY절을 사용할 때 유의점
: 다중행 함수를 사용하지 않은 일반 열은 GROUP BY절에 명시하지 않으면 SELECT절에서 사용할 수 없다.
※ GROUP BY절에 조건을 줄 때 사용하는 HAVING절
1. GROUP BY절과 HAVING절을 사용하여 출력하기
SELECT DEPTNO, JOB, AVG(SAL) FROM EMP
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
결과 >>
HAVING절을 사용할 때 유의점
WHERE절은 출력 대상 행을 제한하고, HAVING절은 그룹화된 대상을 출력에서 제한하므로 쓰임새가 전혀 다르다.
2. WHERE절과 HAVING절의 차이점
SELECT DEPTNO, JOB, AVG(SAL) FROM EMP
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
결과 >>
SELECT DEPTNO, JOB, AVG(SAL) FROM EMP
WHERE SAL <= 3000
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
결과 >>
WHERE절을 추가한 SELECT문에서는 10번 부서의 PRESIDENT 데이터가 출력되지 않는다.
이는 WHERE절이 GROUP BY절과 HAVING절을 사용한 데이터 그룹화보다 먼저 출력 대상이 될 행을 제한하기 때문.
1. WHERE절로 급여가 3000 이하인 데이터 제외
2. GROUP BY절로 부서별, 직책별 데이터를 그룹화
3. HAVING절에서 평균 급여가 2000 이상인 그룹만 그룹화해서 제한
Reference
|
반응형
댓글