본문 바로가기

공부 자료/SQL

[15일차] Case When. 원하는 값 만들기

오늘은 원하는 값이 없다면 CASE WHEN ~ 문을 활용하여 직접 정의한 열로 만드는 학습을 진행할 예정입니다. 

 

 

1. case문

- 함수가 아닌 표현식의 일종으로 하나 혹은 그 이상의 값과 여러 연산자 함수들을 조합해 조건을 만드는 것이며, 넓은 범위 활용이 가능

- CASE WHEN 특정 칼럼의 조건과 일치 / THEN 처리결과(입력 값, 칼럼) ELSE 다른결과 END

 

2. DECODE문 - 사용 방법이 간단하나, 동등 비교 조건에서만 사용이 가능하며 오라클에서만 활용 가능

- DECODE(조건칼럼, 조건1, 반환결과1, 조건2, 반환결과2)

 

[단일 조건에 사용]

1. 
SELECT department_id
	, DECODE(department_id, 100, 1, 0) AS CHK1
    , CASE WHEN department_id=100 Then 1 ELSE 0 END CHK2
    //department_id가 100이면 1을 아니면 0을 반환
FROM employees;

 

[다중 조건에 사용]

SELECT department_id
	,DECODE(department_id, 90, 'A그룹', 60, 'B그룹', 100, 'C그룹', 'D그룹') AS CHK1
    //찾을 정보를 먼저 작성 후 비교 값과 반환 값을 차례대로 작성
    ,CASE WHEN department_id = 90 then 'A그륩'
    	  WHEN department_id = 60 then 'B그륩'
          WHEN department_id = 100 then 'B그륩'
          ELSE 'D그룹' end CHK2
     //각 조건에 대해서 when/then 작성
     
      // dpeartment_id가 90이면 A그룹 / 60이면 B그룹 / 100이면 C그룹 / 나머지는 D그룹
FROM employees;


//정확한 값 지정이 아니라 범위를 지정하고 싶을 경우에는?
1. DECODE는 범위 지정이 불가능하므로 사용할 수 없음 (True or False)
>> CASE문 사용해야 함

SELECT department_id
    ,CASE WHEN department_id >= 90 then 'A그륩'
    	  WHEN department_id <90 then 'B그륩'
          ELSE '대기발령' >>But, CASE문의 경우 null 값에 대한 처리가 필요함
          end CHK2
     //각 조건에 대해서 when/then 작성
     
      // dpeartment_id가 90보다 크거나 같으면 A그룹 / 90보다 작으면 B그룹
FROM employees;

 

오늘은 CASE문과 DECODE문에 대해서 간단하게 알아 봤는데요! 각각이 단일 조건 / 다중 조건 모두 사용이 가능하지만 DECODE의 경우에는 사용 가능한 경우를 잘 따져보고 사용해야 할 것 같네요:)

오늘의 학습은 여기서 마치겠습니다!

 

15일 차 - 출석 인증