본문 바로가기
DB/SQL

SQL decode를 이용하여 출력하기

by wonduk 2023. 6. 28.
728x90

DECODE

조건을 만족하면 x 아니면 y를 출력하며

java의 3항연산자와 비슷합니다.

a=b -> x, a !=b ->y 

 

DECODE(A, B, X, C, Y, Z)

A = B이면 X 출력,

A = C이면 Y 출력,

A ≠ B 이고 A ≠ C이면 Z 출력

DECODE(A1, B, DECODE(A2, C, X, Y), Z)

A1=B이면서 A2=C이면 X 출력,

A1=B이면서 A2≠C이면 Y를 출력,

A1≠B이면 Z 출력

(DECODE 내부의 DECODE 중첩)

 

 

a=b이면 x a!=b면 y를 출력

select decode(컬럼이름,비교대상값,참일 때 값,아닐 때 값,)...
from 테이블 이름;

a=b -> x, a=c -> y, a!=b and a!=c -> z

select decode(a, b, x ,c, y, z),...
from 테이블 이름;

a1=b and a2=c -> x, a1=b and a2 !=c -> y, a1 != b -> z

select decode(a1, b decode(a2, b, x, y),z)
from 테이블이름;

 


*******이후로는 scott계정을 이용해서 문제를 풀어보겠습니다.********

 

 

1.부서번호가 10번이면 부서번호10번, 아니면 10번아님이라고 출력하기

select ename as 직원성명, deptno as 부서번호,
decode(deptno, 10, '부서번호 10번', '10번아님') as decode
from emp;

 

2.ename,job,hiredate를 출력하고 직책이 salesman이면 세일즈맨 아니면 X라고 표기하는 세일즈맨 여부라는 컬럼 만들기

select ename as 직원성명, job as 직책, hiredate as 입사일,
decode(job, 'SALESMAN', '세일즈맨', 'X') as 세일즈맨
from emp;

 

3. 2번과 동일 컬럼 출력하고 SALESMAN이면 세일즈맨이라고 표기하되 아닌경우 출력할 값을 누락하고 안 쓴 '세일즈맨여부'라는 컬럼을 만들어 함께 출력하기

select ename as 직원성명, job as 직책, hiredate as 입사일, 
decode(job, 'SALESMAN', '세일즈맨') as 세일즈맨
from emp;

 

 

4. emp테이블에서 성명,직책,입사일 출력하고 직책이 SALESMAN이면 null 아니면 세일즈맨아님이라고 표기하는 컬럼

select ename as 직원성명, job as 직책, hiredate as 입사일,
decode(job,'SALESMAN',null,'세일즈맨 아님' ) as 세일즈맨여부
from emp;

 

 

5. emp테이블에서 성명,직책,입사일, 수당(comm) 출력하고 수당이 null이면 X null이 아니면 O라고 적는 수당존재여부 출력

select ename as 직원성명, job as 직책, hiredate as 입사일, comm as 수당,
decode(COMM, null , 'X', 'O') as 수당존재여부
from emp;

 

6. emp 테이블에서 직원성명(ename), 부서번호(deptno)를 출력하고, 만약 부서번호가 입력되어있지 않다면 '부서누락', 입력되어 있으면 '누락없음'이라고 표시하는 '부서명누락여부' 컬럼을 만들어 함께 출력하기.

 

select ename as 직원성명, deptno as 부서번호,
decode(deptno,null,'부서누락','누락없음') as 부서명누락여부
from emp;

 

7. emp 테이블에서 직원성명(ename), 부서번호(deptno)를 출력하고, 부서번호가 10번이면 'ACCOUNTING', 20번이면 'RESEARCH', 그 외에는 'ETC'라고 출력하는 '부서명칭' 컬럼을 만들어 함께 출력하기

 

select ename as 직원성명, deptno as 부서번호,
decode(deptno, 10, 'ACCOUNTING', 20,'RESEARCH','ETC') as 부서명칭
from emp;

 

8.emp 테이블에서 직원성명(ename), 부서번호(deptno)를 출력하고,부서번호가 20이고, 직원 이름이 'SMITH'이면 '금주당직', 부서번호가 20이고 SMITH가 아닌 나머지는 '다음주 당직', 그 외에는 null로 표시하는 '비고' 컬럼을 만들어 함께 출력하기

select ename, deptno, decode(deptno,20, 
decode(ename,'SMITH','금주당직','다음주 당직')) as 비교
from emp;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

'DB > SQL' 카테고리의 다른 글

SQL DATE연산자  (0) 2023.06.28
SQL 집계함수(sum,avg,min ....)  (0) 2023.06.28
SQL DML,DDL 연습 문제  (0) 2023.06.28
SQL join을 이용한 DML 연습 문제  (0) 2023.06.28
SQL 제약조건 PK(Primary key),FK(Foreign Key)  (0) 2023.06.28