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

+ Recent posts