NVL(exp1, exp2)
- NULL값을 다른 값으로 바꿀 때 사용한다.
- exp1이 NULL이면 exp2를 반환하고 exp1이 NULL이 아니면 exp1을 반환한다.
- 모든 데이터 타입에 적용 가능하며 exp1, exp2 데이터 타입을 일치시켜야 한다.
- ex) 30번 부서의 사원 이름, 급여, 보너스, 급여 + 보너스, 보너스가 NULL일 경우 0으로 반환하여 조회
1
2
3
4
|
SELECT
ename, sal, comm, sal + comm, sal+NVL(comm,0)
FROM emp
WHERE deptno = 30;
|
NVL2(exp1, exp2, exp3)
- exp1이 NULL이 아닌 경우에는 exp2를 반환하고 exp이 NULL인 경우에는 exp3을 반환한다.
- exp1은 임의의 데이터형을 가질 수 있으며 exp2와 exp3 데이터 타입을 일치시켜야 한다.
- ex) 'K08' 팀 선수들의 이름, 포지션, 포지션이 NULL인 경우 등록안됨, 포지션이 NULL이 아닌 경우 '담당'이라는 문자를 붙여서 조회
1
2
3
4
5
6
|
SELECT
player_name,
position,
NVL2(position, position||'담당','등록안됨')
FROM player
WHERE team_id = 'K08';
|
NULLIF(exp1, exp2)
- NULLIF는 exp1과 exp2를 비교하여 같으면 NULL값을 반환하고 같지 않으면 exp1을 반환한다.
- exp1에는 NULL을 지정할 수 없다.
- ex) 30번 부서의 사원 이름, 업무, 업무가 'SALESMAN' 인 경우 NULL값으로 반환해서 조회
1
2
3
4
5
6
|
SELECT
ename,
job,
NULLIF(job, 'SALESMAN') AS result
FROM emp
WHERE deptno = 30;
|
COALESCE(exp1, ..., expN)
- COALESCE 함수는 나열된 값을 순차적으로 체크하여 NULL이 아닌 첫 번째 인수를 반환한다.
- 모든 인수가 NULL인 경우에는 NULL을 반환한다.
- ex) 사원의 이름, 보너스, 급여, 보너스가 NULL이 아닌 경우 보너스, 보너스가 NULL인 경우 연봉, 모두 NULL인 경우 50으로 조회
1
2
3
4
5
6
|
SELECT
ename,
comm,
sal,
COALESCE(comm, sal, 50) AS RESULT
FROM emp;
|
DECODE(VALUE, IF1, THEN1, IF2, THEN2, ... default값)
- VALUE값이 IF1일 경우 THEN1값으로 반환하고 VALUE2값이 IF2일 경우 THEN2값으로 반환한다.
- 일치하는 것을 발견하지 못한 경우 default값을 반환한다.
- default가 생략되면 오라클은 NULL을 반환한다.
- ex) 사원의 이름, 급여, 급여가 3000인 경우 'A팀', 아닌 경우 '기타'로 반환하여 조회
1
2
3
4
5
|
SELECT
ename,
sal,
DECODE(sal, 3000, 'A팀', '기타')
FROM emp;
|
CASE
- ex)
1
2
3
4
5
6
7
|
CASE
WHEN 비교조건1 THEN 처리1
WHEN 비교조건2 THEN 처리2
...
WHEN 비교조건N THEN 처리N
ELSE 디폴트처리
END
|
- ex) 포지션이 'GK'인 선수들의 이름, 키, 키가 185미만이면 C팀, 185이상 190 미만은 B팀, 190 이상은 A팀으로 반환하여 조회
1
2
3
4
5
6
7
8
9
10
|
SELECT
player_name,
height,
CASE
WHEN height<185 THEN 'C팀'
WHEN height<190 THEN 'B팀'
ELSE 'A팀'
END 결과
FROM player
WHERE position = 'GK';
|
오늘의 한 줄 : NULL을 잘 쓰면 좋을거 같다는 생각이 들었다.
출처 : SK 동반성장 아카데미, 비전공자를 위한 SQL 입문, 「일반 함수」
'공부 > SQL' 카테고리의 다른 글
[SQL] 윈도우 함수 (0) | 2019.12.03 |
---|---|
[SQL] 그룹 함수 (0) | 2019.12.03 |
[SQL] 변환 함수 (0) | 2019.12.03 |
[SQL] 날짜 연산 및 날짜 함수 (0) | 2019.12.03 |
[SQL] 문자 · 숫자 함수 (0) | 2019.12.02 |