--급여 등급이 2등급인 사원들/ 중 부서별 급여 1위를 구하시오.
SELECT *
FROM
( SELECT E.ENAME, E.SAL,D.DNAME,SG.GRADE,
RANK() OVER( PARTITION BY DNAME ORDER BY SAL DESC) AS RNK
FROM EMP E INNER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
INNER JOIN SALGRADE SG
ON SG.GRADE = 2
AND E.SAL BETWEEN LOSAL AND HISAL)
WHERE RNK =1
;
서브쿼리만 출력하면 급여 1위가 아니게 출력되서 한번 더 가공된 서브쿼리를 넣고 WHERE에 1등만 나올 수 있게 RNK =1 을 써준다.
A. count(값)- row의 수를 센다.
B. sum(값) - 값의 합계
C. avg(값) - 값의 평균
D. max(값)- 값의 최대값
F. min(값)- 값의 최소값
※ 집계함수 사용 시 주의 사항
--NULL은 세지 않는다.
SELECT COUNT(ENAME)
FROM EMP
;
--SUM은 수치로 가능한 것만 가져올 수 있음
SELECT SUM(SAL)
FROM EMP
;
SELECT AVG(SAL)
FROM EMP
;
SELECT MAX(SAL)
FROM EMP
;
SELECT MIN(SAL)
FROM EMP
;
SELECT : GROUB BY 에 온 것과 집계함수 및 다른 함수 사용
FROM : 집계 함수 사용 X
WHERE : 집계 함수 사용 X
★GROUP BY : 그룹화 + 압축(집계)
★HAVING : 집계함수사용 조건처리
ORDER BY : GROUB BY에 온것, 집계함수, SELECT에 지정한 것
★: 선택적
실행순서 FROM - WHERE - GROUB BY - HAVING - SELECT - ORDER BY
--GROUB BY
--부서별,업무별 급여 평균을 구하시오.
SELECT DEPTNO,JOB,AVG(SAL),COUNT(*)
FROM EMP
--WHERE JOB = 'CLERK'
GROUP BY DEPTNO, JOB
ORDER BY AVG(SAL) ASC
;
--직원 수 가 3명이상인 업무별 직원 수를 구하시오.
SELECT JOB,CNT
FROM
(
SELECT JOB,COUNT(*) AS CNT
FROM EMP
GROUP BY JOB
)
WHERE CNT > =3
;
SELECT JOB,COUNT(*) AS CNT
FROM EMP
GROUP BY JOB
HAVING COUNT(*) >= 3
;
숫자 : 1 BYTE, 영어 : 2 BYTE, 한글 : 4 BYTE, 공백 : 1 BYTE
테이블 생성, 수정, 삭제 -DDL(정의어)
UPDATE 테이블명 set 컬러명 = 값,.....--> 직접적인 값, 컬러명(기존의 값을 불러옴)
where 조건(선택적 영역) ※ where 없는 경우 모든 row에 적용
기본 형태
DELETE FROM 테이블명
★WHERE 조건 ( 없을 경우 모든 ROW 삭제)
;
★: 선택적
사용 시 꼭 확인 하고 사용하자
--데이터 추가
INSERT INTO HAMBUGER(PNO,PNAME,PRICE,STOCK,PDATE,ETC)
VALUES(5,'쉑쉑',2000,5,'2021-04-01','비싸다')
;
----등록일자별 /재고수량 합계를 구하시오
SELECT PDATE,SUM(STOCK) AS HSUM
FROM HAMBUGER
GROUP BY PDATE
HAVING SUM(STOCK) < 50
;
HAVING은 실습 겸 추가한 조건 , 집계함수 처리조건 명심할 것
--전체 급여 평균(AVG)이하로 급여를 받는 사원들의 급여를 30%인상하여
--인상된 급여기준으로(파티션) 전체 급여 순위를 구하시오. 급여 1.3
--급여평균 VIEW
SELECT AVG(SAL)
FROM EMP
;
--전체 급여 평균 이하 받는 사원 급여 30% 인상 VIEW
SELECT E.ENAME,E.SAL,
CASE WHEN E.SAL < A.ASAL
THEN E.SAL * 1.3
ELSE E.SAL
END AS ESAL
FROM EMP E INNER JOIN ( SELECT FLOOR(AVG(SAL)) AS ASAL
FROM EMP) A
ON 1=1
--인상된 급여기준으로 전체 급여 순위 VIEW
SELECT E.ENAME,E.SAL, E.ESAL,
RANK() OVER( ORDER BY ESAL DESC) AS RNK
FROM ( SELECT E.ENAME,E.SAL,
CASE WHEN E.SAL < A.ASAL
THEN E.SAL * 1.3
ELSE E.SAL
END AS ESAL
FROM EMP E INNER JOIN ( SELECT FLOOR(AVG(SAL)) AS ASAL
FROM EMP) A
ON 1=1 ) E
;
내일은 데이터베이스 시험이다. 글을 쓴 뒤 복습을 해 잘준비하면 무리없이 통과할 수 있을 것 같고, 오늘 큰절망을 만난 하루였다. 아주 롤러코스터를 타는 기분이다 매일매일, 명심해야 될 것은 절대 포기하지말자. 주 100시간