티스토리 뷰

DECODE

IF문과 비슷한 의미

DECODE(A, B, 'C')  : A와 B가 같다면 'C'를 출력한다.

DECODE 함수 안에 DECODE 함 수를 중첩해서 사용 할 수도 있다.

 

CASE-WHEN

DECODE와 비슷하지만 비교연산을 할 수 있다는 장점이 있고, 조건을 만족하면 값이 아닌 쿼리를 수행 할 수도 있다.

 

EX ) WHEN 100 = (SELECT 98 FROM DUAL) THEN

DUAL은 의미하는게 없다.

 

 

실습1 : 직업이 AD_PRESS 인 사람은 A 등급을, 
            ST_MAN 인 사람은 B 등급을,
            IT_PROG 인 사람은 C 등급을,
            SA_REP 인 사람은 D 등급을,
            ST_CLEAK 인 사람은 E 등급을 
             기타는 0 을 부여하여 조회한다.

 

 

이를 DECODE와 CASE-WHEN을 이용하여 풀어 볼 수 있다.

 

 

 

1. DECODE를 이용한 풀이

 

1
2
3
4
5
6
7
8
9
10
11
SELECT  EMPLOYEE_ID
        ,LAST_NAME
        ,DECODE(JOB_ID
              , 'AD_PRESS''A' 
              , 'ST_MAN''B' 
              , 'IT_PROG''C'
              , 'SA_REP''D'
              , 'ST_CLEAK''E'
              , '0') JOB_GRADE
FROM   EMPLOYEES
WHERE  JOB_GRADE = 'B' -- VIEW나 TABLE에 존재하지 않는 컬럼은 조회할 수 없으므로 VIEW가 필요하다.
cs

 

 

 

2. DECODE와 VIEW를 사용 1번의 제한을 해결

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT *
FROM   (
          SELECT  EMPLOYEE_ID
                  ,LAST_NAME
                  ,DECODE(JOB_ID
                        , 'AD_PRESS''A' 
                        , 'ST_MAN''B' 
                        , 'IT_PROG''C'
                        , 'SA_REP''D'
                        , 'ST_CLEAK''E'
                        , '0') JOB_GRADE
          FROM   EMPLOYEES
      )
WHERE  JOB_GRADE = 'B'
;
cs

 

 

 

 

3. CASE-THEN 을 이용한 풀이 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT  ROWNUM
        ,EMPLOYEE_ID
        ,LAST_NAME
        , CASE JOB_ID
                  WHEN 'AD_PRESS' THEN
                    'A'
                  WHEN 'ST_MAN' THEN
                    'B'
                  WHEN 'IT_PROG' THEN
                    'C'
                  WHEN 'SA_REP' THEN
                    'D'
                  WHEN 'ST_CLEAK' THEN
                    'E'
                  ELSE '0'
          END
FROM   EMPLOYEES
;
cs

 

ROWNUM 은 줄 번호를 출력한다.

 

'Database > Oracle' 카테고리의 다른 글

[Oracle] INSERT, UPDATE, DELETE  (0) 2016.02.23
[Oracle] EXISTS  (0) 2016.02.18
[Oracle] VIEW  (0) 2016.02.18
[Oracle] 테이블 조인  (0) 2016.02.17
[Oracle] 테이블(Table) 설계  (0) 2016.02.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함