샘플 스키마 : 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 표현식을 권장한다.
'SQL' 카테고리의 다른 글
[SQL 11] 조인 - 등가조인, 비등가조인 (0) | 2017.12.08 |
---|---|
[SQL 10] 그룹 함수, GROUP BY 절, HAVING 절 (1) | 2017.12.04 |
[SQL 08] 단일 행 함수 - 변환 함수 (0) | 2017.12.03 |
[SQL 07] 단일 행 함수 - 숫자, 날짜 함수 (0) | 2017.12.03 |
[SQL 06] 단일 행 함수 - 문자 함수 (0) | 2017.12.03 |