EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 80/12/17 800 20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 200 30
7566 JONES MANAGER 7839 81/04/02 2975 30 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 300 30
7698 BLAKE MANAGER 7839 81/04/01 2850 30
7782 CLARK MANAGER 7839 81/06/01 2450 10
7788 SCOTT ANALYST 7566 82/10/09 3000 20
7839 KING PRESIDENT 81/11/17 5000 3500 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7876 ADAMS CLERK 7788 83/01/12 1100 20
7900 JAMES CLERK 7698 81/10/03 950 30
7902 FORD ANALYST 7566 81/10/03 3000 20
7934 MILLER CLERK 7782 82/01/23 1300 10
-- EMP 테이블의 사원이름 , 업무, 업무가 'CLERK‘ 인 경우 NULL로 나오도록 출력해보자.
SELECT ENAME, JOB, NULLIF(JOB,'CLERK') AS RESULT
FROM C##SCOTT.EMP;
출력결과
ENAME JOB RESULT
SMITH CLERK
ALLEN SALESMAN SALESMAN
WARD SALESMAN SALESMAN
JONES MANAGER MANAGER
MARTIN SALESMAN SALESMAN
BLAKE MANAGER MANAGER
CLARK MANAGER MANAGER
SCOTT ANALYST ANALYST
KING PRESIDENT PRESIDENT
TURNER SALESMAN SALESMAN
ADAMS CLERK
JAMES CLERK
FORD ANALYST ANALYST
MILLER CLERK
--EMP 테이블의 사원이름, 매니저 번호, 매니저번호가 null이면 ‘대표’ 로 표시하고, 매니저번호가 있으면 MGR'프로'로 조회해보자.
SELECT ENAME, MGR, NVL2(MGR, MGR||'프로','대표')
FROM C##SCOTT.EMP;
출력결과
ENAME MGR NVL2(MGR,MGR||'프로','대표')
SMITH 7902 7902프로
ALLEN 7698 7698프로
WARD 7698 7698프로
JONES 7839 7839프로
MARTIN 7698 7698프로
BLAKE 7839 7839프로
CLARK 7839 7839프로
SCOTT 7566 7566프로
KING 대표
TURNER 7698 7698프로
ADAMS 7788 7788프로
JAMES 7698 7698프로
FORD 7566 7566프로
MILLER 7782 7782프로
||
를 사용하여 컬럼 값 뒤에 '프로'라는 문자열을 붙여주었다.-- EMP테이블에서 이름, 보너스,봉급과,
-- 보너스가 null 아닌 경우 보너스를, 보너스가 null인 경우엔 봉급을,
-- 모두 null인 경우엔 50으로 리턴하는 SQL문을 작성해보자.
SELECT ENAME, COMM, SAL, COALESCE(COMM, SAL, 50) RESULT
FROM C##SCOTT.EMP;
출력결과
ENAME COMM SAL RESULT
SMITH 800 800
ALLEN 300 1600 300
WARD 200 1250 200
JONES 30 2975 30
MARTIN 300 1250 300
BLAKE 2850 2850
CLARK 2450 2450
SCOTT 3000 3000
KING 3500 5000 3500
TURNER 0 1500 0
ADAMS 1100 1100
JAMES 950 950
FORD 3000 3000
MILLER 1300 1300
CASE WHEN 조건문01 THEN 반환값01
WHEN 조건문02 THEN 반환값02
ELSE 반환값03
END;
WHEN의 갯수는 제한되어 있지 않다.
DECODE(EXPR, IF01, THEN01, IF02, THEN02,,,,)
WHEN은 조건문을 작성할 수 있으므로 비교적 더 자세하게 조건을 작성할 수 있다.
DECODE는 IF에 있는 값들이 같은지/다른지 만 비교하여 반환값을 반환한다.
WHEN은 PL/SQL에서도 사용 가능하지만 DECODE는 SQL에서만 사용 가능하다.
-- 급여가 1000보다 작으면 ‘A’, 1000이상 2500미만이면 ‘B’, 2500이상이면 ‘C’로 표시하고, 사원명, 봉급을 조회해보자.
SELECT ENAME, SAL, DECODE(SIGN(SAL-1000), -1, 'A', DECODE(SIGN(SAL-2500), -1, 'B', 'C')) GRADE
FROM C##SCOTT.EMP;
출력결과
ENAME SAL GRADE
SMITH 800 A
ALLEN 1600 B
WARD 1250 B
JONES 2975 C
MARTIN 1250 B
BLAKE 2850 C
CLARK 2450 B
SCOTT 3000 C
KING 5000 C
TURNER 1500 B
ADAMS 1100 B
JAMES 950 A
FORD 3000 C
MILLER 1300 B
SIGN(SAL-1000)
= -1 이라는 것은, 봉금이 1000보다 작다는 뜻이 된다.-- 급여가 1000보다 작으면 ‘A’, 1000이상 2500미만이면 ‘B’, 2500이상이면 ‘C’로 표시하고, 사원명, 봉급을 조회해보자.
SELECT ENAME, SAL,
CASE WHEN SAL < 1000 THEN 'A'
WHEN SAL>=1000 AND SAL<2500 THEN 'B'
ELSE 'C' END AS GRADE
FROM C##SCOTT.EMP ORDER BY GRADE;
출력결과
ENAME SAL GRADE
JAMES 950 A
SMITH 800 A
MARTIN 1250 B
WARD 1250 B
ALLEN 1600 B
MILLER 1300 B
ADAMS 1100 B
TURNER 1500 B
CLARK 2450 B
FORD 3000 C
KING 5000 C
SCOTT 3000 C
JONES 2975 C
BLAKE 2850 C