SELECT문 해석 순서, GROUP BY, HAVING - Oracle SQL Developer

coldZero·2023년 11월 22일
0

OracleSQLDeveloper

목록 보기
1/4

-- SELECT문 해석 순서

⑤ : SELECT 컬럼명 AS 별칭 계산식 함수식
① : FROM 참조할 테이블 명
② : WHERE 컬럼명 | 함수식 비교연산자 비교값
③ : GROUP BY 크룹을 묶을 컬럼명
④ : HAVING : 그룹함수식 비교연산자 비교값
⑥ : ORDER BY 컬럼명 | 별칭 | 컬럼순번 정렬방식 [ NULL FIRST | LAST ] ;

-- GROUP BY

같은 값들이 여러개 기록된 컬럼을 가지고 같은 값들을 하나의 그룹으로 묶는다.

사용 방법 : GROUP BY 컬럼명 | 함수식, ...

사용 목적 : 여러개의 값을 묶어서 하나로 처리할 목적으로 사용하며, 그룹으로 묶은 값에 대해서 SELECT절에서 그룹 함수를 사용한다.

주의 사항 : SELECT문에 GROUP BY절을 사용할 경우 SELECT절에 명시한 조회하려는 컬럼 중 그룹함수가 적용되지 않은 컬럼을 모두 GRUP BY절에 작성 해야 한다.(WHERE와 같이 사용시에는 해석 순서 중요)

[ GROUP BY 예시 ]

예시 1

문제 : EMPLOYEE 테이블에서 부서코드, 부서(그룹) 별 급여 합계 조회

(오류 코드)
SELECT DEPT_CODE, SUM(SALARY)
FROM EMPLOYEE;
*오류코드내용 : 실행시 GROUP BY절을 사용하지 않았을때 "ORA-00937: 단일 그룹의 그룹 함수가 아닙니다" 라는 오류코드가 나온다.
*오류코드이유 : DEPT_CODE 컬럼은 23행, SUM(SALARY)컬럼은 1행으로 하나의 표에 작성할 수 없기 때문이다.

(적합 코드)
SELECT DEPT_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE;
*코드해결내용 : GROUP BY 부서별로 그룹을 지어 각 그룹의 합계 조회

--- 질의 결과(공란은 null) ---
D9	17700000
D6	10100000
D1	7820000
D8	6986240
	5210000
D5	15760000
D2	6520000
예시 2

문제 : EMPLOYEE 테이블에서 부서 별로 같은 직급인 사원의 급여 합계를 조회하고 부서 코드 오름차순으로 정렬
SELECT DEPT_CODE, JOB_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE, JOB_CODE
ORDER BY DEPT_CODE ASC;

--- 질의 결과(공란은 null) ---
D1	J6	6440000
D1	J7	1380000
D2	J4	6520000
D5	J3	3500000
D5	J5	8460000
D5	J7	3800000
D6	J3	7300000
D6	J4	2800000
D8	J6	6986240
D9	J1	8000000
D9	J2	9700000
	J6	2320000
	J7	2890000

-- HAVING

그룹함수로 구해 올 그룹에 대한 조건을 설정할 때 사용한다.

사용 방법 : HAVING 컬럼명 | 함수식 비교연산자 비교값

[ HAVING 예시 ]

문제 : 부서별 그룹의 급여 합계 중 9백만원을 초과하는 부서코드와 급여 합계 조회

SELECT DEPT_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING SUM(SALARY) > 9000000;

--- 질의 결과 ---
D9	17700000
D6	10100000
D5	15760000
profile
교육생

0개의 댓글