👉 그룹 하나의 결과만 출력된다.
👉 SELECT 컬럼
FROM 테이블명
[ WHERE 조건식 ]
[ GROUP BY 컬럼명 [ , 컬럼명, 컬럼명, .....] ]
[ HAVING 조건식 ]
[ ORDER BY [ 컬럼명 ] ]
✏️ 부서별 급여 합계 구하기
SELECT DEPT_CODE, SUM (SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE;
✏️ 직책별 급여의 합계, 평균 구하기
SELECT JOB_CODE, SUM (SALARY), AVG (SALARY)
FROM EMPLOYEE
GROUP BY JOB_CODE;
✏️ 부서별 사원 수 구하기
SELECT DEPT_CODE, COUNT (*)
FROM EMPLOYEE
GROUP BY DEPT_CODE;
❗ GROUP BY 절에는 다수의 컬럼을 넣을 수 있다.
SELECT DEPT_CODE, JOB_CODE, COUNT (*)
FROM EMPLOYEE
GROUP BY DEPT_CODE, JOB_CODE; -- D9면서 J2인 사원
❗ GROUP BY 를 사용한 절에서 WHERE 도 사용이 가능하다.
SELECT DEPT_CODE, SUM (SALARY), COUNT (*)
FROM EMPLOYEE
WHERE BONUS IS NOT NULL
GROUP BY DEPT_CODE;
👉 일반 조건은 WHERE 절에 기술하지만 그룹 함수를 포함한 조건은 HAVING 절에 기술한다.
✏️ 부서별 인원이 3명 이상인 부서만 출력하기
SELECT DEPT_CODE, COUNT (*)
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING COUNT (*) >= 3;
✏️ 평균 급여가 300만원 이상인 부서 출력하기
SELECT DEPT_CODE, AVG (SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING AVG (SALARY) >= 3000000 AND COUNT (*) >= 4;
✏️ 매니저가 관리하는 사원이 2명 이상인 매니저 아이디 출력하기
SELECT MANAGER_ID, COUNT (*)
FROM EMPLOYEE
WHERE MANAGER_ID IS NOT NULL
GROUP BY MANAGER_ID
HAVING COUNT (*) >= 2;
✏️ 남자, 여자의 급여 평균을 구하고 인원 수를 구하기
SELECT DECODE (SUBSTR (EMP_NO,8,1), '1', '남', '3', '남', '2', '여', '4', '여'),
AVG (SALARY), COUNT (*)
FROM EMPLOYEE
GROUP BY (SUBSTR (EMP_NO,8,1), '1', '남', '3', '남', '2', '여', '4', '여');
👉 [ORDER BY 컬럼명 정렬방식( DESC (내림차순), ASC (오름차순, DEFAULT) ]
👉 ASC 오름차순 (DEFAULT 값, 생략 가능) : NULL 인 값을 나중에 출력한다.
👉 DESC 내림차순 : NULL인 값을 먼저 출력한다.
✏️ 이름을 기준으로 오름차순 정렬하기
SELECT *
FROM EMPLOYEE
ORDER BY EMP_NAME; -- ASC 생략
✏️ 월급이 높은 사람부터 낮은 사람으로 정렬 / 이름, 급여, 보너스 조회
SELECT EMP_NAME, SALARY, BONUS
FROM EMPLOYEE
ORDER BY SALARY DESC;
✏️ 부서코드를 기준으로 오름차순 정렬
✏️ 값이 같으면 월급은 내림차순
✏️ 월급이 같으면 이름은 오름차순
SELECT *
FROM EMPLOYEE
ORDER BY DEPT_CODE ASC, SALARY DESC, EMP_NAME ASC;
SELECT EMP_NAME, SALARY AS 월급, BONUS -- 2번
FROM EMPLOYEE -- 1번
ORDER BY 월급; - -- 3번
-- 실행순서
👉 옵션을 설정해서 NULL 값 출력 위치를 변경할 수 있다.
ORDER BY BONUS DESC NULLS FIRST; -- NULL 값이 앞에 옴
ORDER BY BONUS DESC NULLS LAST; -- NULL 값이 뒤에 옴
👉 SELECT문을 이용해서 데이터를 조회하면 RESULT SET 이 출력되는데
RESULT SET에 출력되는 컬럼에는 자동으로 INDEX 번호가 1부터 부여가 된다.
SELECT *
FROM EMPLOYEE
ORDER BY 1; -- 첫번째 컬럼 ( EMP_ID ) 오름차순 정렬