복습할 양이 꽤 많다.
오늘은 세번째 복습이다.
SELECT ename as 이름
, EXTRACT(YEAR FROM hiredate) as 연도
, EXTRACT(MONTH FROM hiredate) as 달
, EXTRACT(DAY FROM hiredate) as 요일
, TO_CHAR(sal, '999,999') as 월급
FROM emp

EXTRACT : 날짜 컬럼에서 연도/월/일/시간/분/초를 추출할 수 있는 함수
TO_CHAR : 숫자 컬럼을 추출할 때 숫자서식을 지정해주는 함수
SELECT ename
, hiredate
FROM emp
WHERE hiredate = TO_DATE('81/11/17', 'RR/MM/DD')

TO_DATE : 입력한 날짜 데이터의 형식을 지정할 수 있는 함수
SELECT ename
, comm
, NVL(comm, 0)
FROM emp

NVL : NULL 값을 대체할 값을 지정해주는 함수
SELECT ename
, sal
, comm
, NVL2(comm, sal+comm, sal)
FROM emp
WHERE job IN ('SALESMAN', 'ANALYST')

comm에는 null인 값들이 포함되어 있다
NVL2 : 컬럼의 값이 null이 아닐 때와 null일 때 어떤 값을 출력할지 각각 지정하는 함수
- 이 경우에는 comm이 null이 아닌 경우 sal+comm 값을, null인 경우 sal 값을 추출하도록 하였다
SELECT ename
, deptno
, DECODE(deptno, 10, 300, 20, 400, 0) as 보너스
FROM emp

DECODE : 엑셀의 IF와 유사. 컬럼 값에 따라 어떤 값을 추출할지 지정하는 함수
SELECT ename 이름 , job 직업 , sal 월급 , CASE WHEN sal >= 3000 THEN 500 WHEN sal >= 2000 THEN 300 WHEN sal >= 1000 THEN 200 ELSE 0 END AS 보너스 FROM emp WHERE job IN ('SALESMAN', 'ANALYST')
CASE : DECODE와 같이 엑셀의 IF 역할을 수행한다. 다만, DECODE는 등호(=) 비교만 가능하지만, CASE는 등호와 부등호 비교 모두 가능하다.
SELECT MAX(sal) , MIN(sal) , ROUND(AVG(sal),0) FROM emp
MAX, MIN, AVG : 지정한 컬럼의 최대/최소/평균 값을 구하는 함수SELECT job , MAX(sal) FROM emp GROUP BY job
GROUP BY : 데이터를 Grouping 하는 함수. FROM, WHERE 쿼리 진행후에 실행된다.