SQL 단일행 함수_일반함수
일반함수 (기타 함수)
| 함수 | 설명 |
|---|---|
| nvl() | null값을 어떤 특정한 값으로 변환해서 표출할 때 사용, 값이 실제로 바뀌는 것이 아님 nvl(null값이 포함된 필드명, 표시할 값) : null 값을 지정한 값으로 표시함 |
| nvl2() | nvl2(null값을 체크할 필드명, 인수1, 인수2), 값이 있으면 인수 1 출력, 값이 없으면(null이면) 인수 2 출력 |
| decode() | decode(필드명, 조건1, 결과1, 조건2, 결과2,,,default값) 조건1에 해당하면 결과1 반환,,,, 해당하는 것이 없으면 default값 반환 |
| case | case~when~ 구문이라고도 하며 조건에 맞는 문장을 수행 switch문과 유사 |
일반함수 사용례
{ nvl() }
▷ emp테이블에서 comm필드 내의 null을 0으로 바꾸어서 표출
▶ [ SQL> select ename, sal, comm, nvl(comm, 0) from emp; ]
| ENAME | SAL | COMM | NVL(COMM, 0) |
|---|---|---|---|
| SMITH | 800 | 0 | |
| JONES | 2975 | 0 | |
| TURNER | 1500 | 0 (null 아님) | 0 (comm값이 0이라서 0으로 표시됨) |
| ... | ... | ... | ... |
{ nvl2() }
▷ 보너스가 있으면 총급여(급여 + 보너스)를 출력하고, 보너스가 없으면 급여만 출력
▶ [ SQL> select ename, sal, comm, nvl2(comm, sal+comm, sal) 총급여 from emp; ]
| ENAME | SAL | COMM | 총급여 |
|---|---|---|---|
| SMITH | 800 | 800 | |
| ALLEN | 1600 | 300 | 1900 |
| TURNER | 1500 | 0 (null 아님) | 1500 |
| ... | ... | ... | ... |
{ decode() }
▷ 부서별로 매출에 따른 급여 인상 예정
ANALYST 10%, CLERK 15%, MANAGER 20% 인상
사원명, 업무, 급여를 출력
각각의 조건에 따른 계산식 적용
급여가 높은 순으로 정렬
▶ [ SQL> select ename, job, sal,
decode(job, 'ANALYST', sal * 1.1, 'CLERK', sal * 1.15, 'MANAGER', sal * 1.2, sal) 급여인상액
from emp
order by 3 desc; ]
| ENAME | JOB | SAL | 급여인상액 |
|---|---|---|---|
| FORD | ANALYST | 3000 | 3300 |
| JONES | MANAGER | 2975 | 3570 |
| MILLER | CLERK | 1300 | 1495 |
| WARD | SALESMAN | 1250 | 1250 |
| ... | ... | ... | ... |
{ case~when~구문 }
맞는 조건이 있을 경우 결과를 실행해서 표출함
조건에 걸리지 않는 레코드는 기본값이 반영됨
시작은 CASE로, 끝은 END로 선언해야하며
조건 앞에는 WHEN, 결과 앞에는 THEN을 써야함
※ 형식) case when 조건1 then 결과1
when 조건2 then 결과2
when 조건3 then 결과3
else 기본값 end
▷ 위의 decode()에서 했던 예제를 case~when~
구문으로 바꾸어서 작성
▶ [ SQL> select ename, job, sal,
case when job=upper('analyst') then sal * 1.1
when job=upper('clerk') then sal * 1.15
when job=upper('manager') then sal * 1.2
else sal end 급여인상액 from emp
order by 3 desc; ]
---- 결과는 위와 동일 ----
일반함수는 컴퓨터언어의 조건문과 유사한 면이 있기 때문에
익혀두면 원하는 조건에 따른 결과를 산출할 수 있겠습니다.