#6 DBMS _SELECT문_4

정진형·2021년 11월 4일
0

DBMS

목록 보기
6/11
post-thumbnail

oracleDB XE11g R2, DBeaver 21.2.3

wihdow10

-- DISTINCT, GROUP BY
-- DUSTINCT는 유니크(중복을 제거)한 데이터(컬럼이나 레코드)를 조회하는 경우 사용한다
-- GRUOP BY는 데이터그룹핑을 해서 그 결과를 가져오는 경우 사용한다 집계합수와 짝을 이루어 사용할 수 있다
SELECT	DISTINCT DEPARTMENT_ID
FROIM	EMPLOYEES e
;

SELECT	DISTINCT DEPARTMENT_ID
FROIM	EMPLOYEES e
GRUOP 	BY DEPARTMENT_ID
;

-- 부서별 급여 합계 추가
-- DISTINCT는 SUM등 집계함수 사용불가
SELECT	DISTINCT DEPARTMENT_ID, SUM(SALARY)
FROM	EMPLOYEES e
;

-- GROUP BY 중복되는 값을 그룹화 시켜 활용 가능하다
SELECT	DISTINCT DEPARTMENT_ID, SUM(SALARY)
FROM	EMPLOYEES e
GROUP	BY DEPARTMENT_ID
;

-- 부서별 사원수와 평균 급여를 구해보자
SELECT	DEPARTMENT_ID, SUM(SALARY), COUNT(EMPLOYEE_ID), AVG(SALARY)
FROM	EMPLOYEES e
GROUP	BY DEPARTMENT_ID
;

SELECT * FROM EMPLOYEES e ORDER BY DEPARTMENT_ID ;
SELECT COUNT(*) FROM EMPLOYEES e ;
SELECT COUNT(*), DEPARTMENT_ID FROM EMPLOYEES e GROUP BY DEPARTNMENT ;
SELECT SUM(*) FROM EMPLOYEES e ;
SELECT SUM(*), DEPARTMENT_ID FROM EMPLOYEES e GROUP BY DEPARTNMENT ;
SELECT AVG(*) FROM EMPLOYEES e ;
SELECT AVG(*), DEPARTMENT_ID FROM EMPLOYEES e GROUP BY DEPARTNMENT ;

-- 부서별, 직급별 사원사와 평균 급여, 부서id, 직급id를 구하시오
-- TO_CHAR(AVG(SALARY), '999,999) : 소수점 이하 반올림 제거
-- 부서번호 80번만 조회
SELECT	DEPARTMENT_ID, JOB_ID
	COUNT(EMPLOYEE_ID),TO_CHAR(AVG(SALARAY), '999,999') avgSal, SUM(SALARY)
FROM	EMPLOYEES e
WHERE	DEPARTMENT_ID = 80
GROUP	BY DEPARTMENT_ID, JOB_ID
-- ORDER BY 1, 2, 3, 4,(셀렉트 구문에 칼럼 순서대로 대입)
-- ORDER BY DEPARTMENT_ID, JOB_ID(여러개의 칼럼도 가능)
-- ORDER BY avgSal(알리아스 가능)
ORDER	BY DEPARTMENT_ID, JOB_ID
;

-- 9 : 한자리의 숫자를 표현
SELECT 123456.78 FROM dual ;
SELECT TO_CHAR(123456.78, '999,999.99') FROM dual;
SELECT TO_CHAR(123456.78, '999,999.990') FROM dual;

-- HAVING절은 집계함수를 가지고 조건비교를 할때 사용한다.
-- HAVING절은 GROUP BY절과 함께 사용되다
-- 부서별 사원수가 10명 이상인 부서를 구하라
-- GROUP BY절 이전에 절은 그룹핑하기 전 처리 이후 절은 그룹핑을 하고 처리한다
SELECT	DEPARTMENT_ID, COUNT(*) cj
FROM	EMPLOYEES e
WHERE	DEPARTMENT_ID IS NOT NULL
GROUP	BY DEPARTMENT_ID
HAVING 	COUNT(*) >= 10
;

-- EMPLOYEES 테이블에서 급여의 최대 값이 10000 이상인 부서에 대해서 부서번호, 평균급여, 급여의 합을 구하여라
SELECT	DEPARTMENT_ID, AVG(SALARY), SUM(SALARY)
FROM	EMPLOYEES e
WHERE	DEPARTMENT_ID IS NOT NULL
GROUP	BY DEPARTMENT_ID
HAVING 	MAX(SALARY) >= 10000
;

-- EMPlOYEES테이블에서 해당 테이블에 등록되어 있는 인원수, 평균연봉, 부서의 수
-- COMMISSION_PCT가 NULL이 아닌 인원수를 구하여라
SELECT	COUNT(*), AVG(SALARY), COUNT(DISTINCT)DEPARTMEN_ID) , COUNT(COMMISSION_PCT)
FROM	EMPLPYEES e
;

SELECT * FROM EMPLOYEES e ; -- 107
SELECT COUNT(*) FROM EMPLOYEES e ; -- 107
SELECT COUNT(MANAGER_ID) FROM EMPLOYEES e ; -- 106
SELECT COUNT(DISTINCT MANAGER_ID) FROM EMPLOYEES e ; -- 11
SELECT * FROM EMPLOYEES e WHERE MANAGER_ID IS NOT NULL ; -- 106

0개의 댓글