샘플 스키마 : HR

설명하는 과정에서 예제로 주어진 문장은 눈으로 보지만 말고 직접 실행시켜 보길 권한다.




No. 01

 

 

단일 행 함수 - 일반 함수


일반 함수

 함수명

기능 & 사용 

NVL

 NVL(expr1, expr2)

 expr1의 값이 NULL일 경우 expr2 값으로 대체한다.

 

NVL2

 NVL2(expr1, expr2, expr3)

 expr1의 값이 NULL이 아닌 경우 : expr2 값을 반환

 expr1의 값이 NULL인 경우 : expr3 값을 반환

 

NULLIF

 NULLIF(expr1, expr2)

 expr1과 expr2의 값이 같은 경우 : NULL 값을 반환

 expr1과 expr2의 값이 다른 경우 : expr1 값을 반환

 

COALESCE

 COALESCE(expr1, expr2, …, exprn)

 표현식 중 NULL이 아닌 첫 번째 표현식을 반환한다.


◈ 예제

select commission_pct, nvl2(commission_pct, commission_pct+0.1, 0.25) "NVL2 함수"

from employees;


select nullif(1, 1) 같은경우, nullif(1, 2) 다른경우, nullif('aa', 'ab') 다른경우2

from dual;


select coalesce(1, 2, 3, 4, 5), coalesce(null, null, 3, 4, 5)

from dual;


앞에서부터 차례로 null 값인지 검사하고 아닐 경우 그 값을 반환한다.




No. 02

 

 

조건 표현식(CASE, DECODE)


CASE : ANSI 표준 SQL (9i 부터 가능)

DECODE : 오라클 구문



CASE 표현 기본 구조

CASE 컬럼|표현식 WHEN 비교값1 THEN 리턴값1

[WHEN 비교값2 THEN 리턴값2

WHEN 비교값 n THEN 리턴값n

ELSE 기본값]

END [별명]

  • 컬럼(또는 표현식)과 WHEN절의 비교 값이 같으면 리턴 값을 반환한다.
  • WHEN 절에 같은 값이 없으면 기본값을 반환한다.
  • 'ELSE 기본값'을 쓰지 않으면 같은 값이 없을 경우 NULL 값을 반환한다.
  • 표현식이 길기 때문에 사용을 권한다.


◈ 예제

select last_name, job_id, salary,

   case job_id when 'IT_PROG' then 1.10*salary

 when 'ST_CLERK' then 1.15*salary

 when 'SA_REP' then 1.20*salary

 else salary

   end "REVISED_SALARY"

from employees;



DECODE 함수 기본 구조

DECODE (컬럼|표현식, 찾을값1, 결과1 [,찾을값, 결과2, …][, 기본값]) [별명]

  • 컬럼(또는 표현식)과 찾을값 들과 비교하여 매칭되는 곳의 결과 값을 반환한다.
  • 일치하는 값이 없을 경우 기본값을 반환한다.
  • 기본값을 쓰지 않으면 찾을 값이 없을 경우 NULL 값을 반환한다.
  • 표현식이 길기 때문에 별명 사용을 권한다.
  • CASE 표현과 같은 기능을 한다.


◈ 예제

select last_name, job_id, salary,

   decode (job_id, 'IT_PROG', 1.10*salary,

'ST_CLERK', 1.15*salary,

'SA_REP', 1.20*salary,

  salary) "REVISED_SALARY"

from employees;


CASE와 DECODE 둘 다 같은 기능을 수행하지만,

가독성이 CASE 표현식이 더 좋기 때문에 사용할 일이 생긴다면 CASE 표현식을 권장한다.




+ Recent posts