case when~ then~ else~end as절 (if 문 )
부등호 <,>,= 비교가 모두 가능하다
decode 는 = 부등호 비교만 가능했음!
예제 : 이름, 월급, 보너스를 출력하는데 월급이 3000 이상이면 보너스를 9000을 출력하고 월급이 3000보다 작으면 0을 출력하시오
select ename, sal, case when sal ≥3000 then 9000 else 0 end as 보너스
from emp;
문제 : 직업이 세일즈맨, 어널리스트인 사원들의 이름 직업 월급 보너스를 출력
월급이 3000 이상이면 보너스를 500, 2000 이상이면 보너스를 300 월급이 1000 이상이면 보너스 200 나머지는 0을 출력한다.
select ename, job, sal, case when sal ≤ 3000 then 500
when sal ≤ 2000 then 300
when sal ≤ 1000 then 200
else 0 end as 보너스
from emp
where job in ('SALESMAN', 'ANALYST');
설명 : 2000 만원이나, 1000만원의 조건절이 다른 값들이랑 겹칠일이 없는 이유는
이미 첫번째 조건문에서 3000 이상은 500 을 주어라 라는 조건이 먼저 실행 되었으므로
2000 만원 조건문을 실행 할 때에는 3000 문 조건절이 이행한것을 제외하고 출력 되므로
따로 1000만원이상 2000만원 미만은 200 만원 이런식으로 코딩을 할 필요가 없다.
case 문은 통신사 데이터 다룰때! 빛을 발한다
문제 : 이름, 나이, 통신사 출력 통신사가 sk (skt,,등등,,,) 인 학생들의 이름과 나이와 통신사를 출력하시오
select ename, age, telecom
from emp14
where lower(telecom) in ('sk', 'skt');
또는
select ename, age, telecom
from emp14
where lower(telecom) like 'sk%' ;
문제 : 이름, 나이, 통신사. 보너스, 출력 하는데 통신사가 sk 이면 보너스를 3000을 출력 하고, 나머지 통신사는 2000을 출력
select ename, age, telecom, case when lower(telecom) in ('sk', 'skt')
then 3000
else 2000
end as 보너스
from emp 14;
또는
select ename, age, telecom,
case when lower(telecom) like 'sk%'
then 3000
else 2000
end as 보너스
from emp14;
문제 : 이름과 나이와 통신사와 보너스를 출력하는데, 통신사가 sk 이면 보너스 3000, 통신사가 lg 면 보너스 3500 나머지 통신사는 0을 출력
select ename, age, telecom,
case when lower(telecom) in ('sk', 'skt') then 3000
when lower(telecom) in ('lg', 'lgt') then 3500
else 0 end as 보너스
from emp14;
문제 : 직업이 세일즈맨 어널리스트가 아닌 사원들의 이름과 월급과 부서번호, 보너스를 출력하는데, 부서번호가 10 번이면 5000 이 나오게 하고 아니면 0 이 나오게 출력 , 그리고 월급을 출력 할때 천단위를 부여하여 출력 그리고 컬럼명을 출력할때 한글로 출력
select ename 이름,to_char(sal, '999,999')월급, deptno 부서번호,
decode(deptno, 10, 5000, 0 ) as 보너스
from emp
where job not in ('SALESMAN",'ANALYST');
'Oracle > SQL' 카테고리의 다른 글
SQL 다중행 함수 - 그룹함수 (MIN) 최소값 (0) | 2021.11.19 |
---|---|
SQL 다중행 함수 - 그룹함수 MAX (최대값) (0) | 2021.11.19 |
SQL 단일행 함수 - 일반함수 ( Decode ) (0) | 2021.11.19 |
SQL 단일행 함수 - 일반함수 (NULL 을 처리하는 NVL, NVL2) (0) | 2021.11.19 |
SQL 단일행 함수 -변환함수 (to_number) , 암시적 형 변환 (0) | 2021.11.19 |