-
SQL 단일행 함수_일반함수Data Base_Oracle/SQL 2020. 1. 2. 23:47
일반함수 (기타 함수)
함수 설명 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; ]
---- 결과는 위와 동일 ----
일반함수는 컴퓨터언어의 조건문과 유사한 면이 있기 때문에
익혀두면 원하는 조건에 따른 결과를 산출할 수 있겠습니다.
'Data Base_Oracle > SQL' 카테고리의 다른 글
SQL 그룹함수, Group by, Having 조건식 (0) 2020.01.04 SQL 중첩함수, 동적 매개변수 활용 (0) 2020.01.03 SQL 단일행 함수_변환함수, to_char() 출력 패턴 (0) 2020.01.02 SQL 단일행 함수_날짜함수 (0) 2020.01.02 SQL 단일행 함수_숫자함수 (0) 2020.01.02