NVL : Null값을 처리할 때 가장 많이 사용하는 함수. "null인 경우 다른걸로 바꿀게"
- Null은 계산에 참여할 때 결과값을 Null로 만들어버림. null+1 = null , null*2 = null ...
- Null이 그냥 0인척 하게 해주기 위해 이 작업이 필요
NVL2 : 널이 아니어도 값을 바꿔버림 "null이 아닌 경우 이걸로 바꾸고 null인 경우 저걸로 바꿀게"
다만 NVL 함수를 쓰더라도 애초에 SALARY도 null이다 그럼 결과가 또 null이 나오긴함. NVL 함수를 중첩해서 써도되긴함
근데 중첩하면 좀 복잡하니까 이 함수를 쓰면됨
COALESCE : 당신이 널이 아닐때까지 쫓아가겠다
SELECT last_name, salary, commission_pct
, COALESCE (salary * commission_pct, salary * 0.1, 200)
FROM employees ;
Salary * commission_pct 가 널이 아니면 그 값을 리턴,
널이면 salary * 0.1
얘가 널이 아니면 그 값을 리턴, 이것도 널이면 200을 리턴하라는 뜻
끊임없이 인수의 갯수를 늘려갈 수 있음
DECODE
- 조건을 만들 때 쓰는 것.
- Where은 있던 행을 날릴때 쓰는거지, 새로운 계산값을 만들고 할때는 where 아님
- 줄바꿈/들여쓰기 잘 써야 안헷갈린다
SELECT last_name, job_id, salary
,DECODE(job_id, 'AD_VP' , salary * 1.3
, 'AC_MGR', salary * 1.25
, 'SA_REP', salary * 1.2
, salary * 1.1) AS NEW_SAL
FROM employees ;
(job_id에 AD_VP가 들어 있으면 1.3을 곱하고 ...
위에 아무데도 해당이 안되면 1.1을 곱하자 )
CASE
- 위와 똑같은 결과를 리턴함. 편한거 써도 되는데 CASE가 좀더 활용도가 높음.
SELECT last_name, job_id, salary
,CASE job_id WHEN 'AD_VP' THEN salary * 1.3
WHEN 'AC_MGR' THEN salary * 1.25
WHEN 'SA_REP' THEN salary * 1.2
ELSE salary * 1.1
END AS NEW_SAL
FROM employees ;
- 이렇게도 쓸수 있기 때문임
비교하는 컬럼 없이 바로 조건식부터 쓸수도 있음. Where절에 쓰는거 암거나 나써도됨. IN, < > = BETWEEN LIKE... - DECODE는 이런건 안됨
SELECT last_name, salary
,CASE WHEN salary >= 20000 THEN '상'
WHEN salary >= 10000 THEN '중'
ELSE '하'
END AS 구분
FROM employees ;
출처 : https://youtu.be/8AJteBjM8Wc?si=Z_CtY6prMLfYqd52
'근거 있는 일하기_SQL' 카테고리의 다른 글
GROUP BY (0) | 2024.04.19 |
---|---|
함수 NULL 주의 (0) | 2024.04.19 |
ORACLE DB 함수 (4. 형 변환 함수) (0) | 2024.04.15 |
ORACLE DB 함수 (3. 날짜 함수) (0) | 2024.04.14 |
ORACLE DB 함수 (2.숫자함수) (0) | 2024.04.14 |