💻 IT/📌 DataBase

[CASE 표현식] SQL CASE 문 :: 복잡한 조건 논리 처리하기

GODSU 2021. 7. 28. 07:00
반응형

 

 

오늘은 SQL을 작성할 때, 복잡한 논리 조건을 처리할 때 사용하는 CASE문을 알려드리겠습니다

 

 

 

 

간단한 조건을 구분할 때는 DECODE 함수를 사용해도 되지만

복잡한 논리 표현을 처리할 때는 CASE문을 사용하는 게 쉽게 처리할 수 있습니다.

 

CASE 표현식
CASE
    WHEN 조건1 THEN 출력 값1
    WHEN 조건2 THEN 출력 값2
    WHEN 조건3 THEN 출력 값3
    ...
    
    ELSE 출력 값N
END

 

 

예제를 보면서 확인해보겠습니다!

 

 

예제
CREATE TABLE STUDENT (
    student_id NUMBER NOT NULL,
    name varchar2(30) NOT NULL,
    age NUMBER NOT NULL,
    adress varchar2(100),
    phoneNumber varchar2(15),
    PRIMARY KEY (student_id)
);

INSERT INTO STUDENT VALUES(2021001, '정테스','8','서울 성동구','010-1234-5678');

INSERT INTO STUDENT VALUES(2021002, '김테스','14','서울 강동구','010-1212-3434');

INSERT INTO STUDENT VALUES(2021003, '박테스','18','서울 성북구','010-5656-7878');
SELECT * FROM STUDENT;

 

실습을 위한 테이블과 데이터를 준비합니다.

 

 

 

 

 

문제)  만약 이 데이터 중 학생이 다니는 학교를 구분하려면 어떻게 해야 할까요?

SELECT 
      STUDENT_ID
    , NAME
    , AGE
    , ADRESS
    , PHONENUMBER
    , DECODE(AGE,8,'초등학교',14,'중학교',18,'고등학교','') "SCHOOL"
FROM STUDENT;

 

DECODE로 표현할 수는 있는데.. 특정 값(8,14,18)으로 비교하기 때문에 데이터가 많아지거나 복잡해지면 데이터 추출 시 복잡해집니다

 

 

 

SELECT 
      STUDENT_ID
    , NAME
    , AGE
    , ADRESS
    , PHONENUMBER
    , CASE
          WHEN AGE >= 8 AND AGE <14 THEN '초등학생'
          WHEN AGE >= 14 AND AGE <17 THEN '중학생'
          WHEN AGE >= 17 AND AGE <20 THEN '고등학생'
      END "SCHOOL"
FROM STUDENT;

 

CASE 표현식을 사용해도 동일하게 데이터를 추출할 수 있습니다.

위에 DECODE 쿼리보단 쿼리 가독성도 좋아지며, 데이터의 특정 조건에 맞춰 출력하거나 조작해야 한다면 CASE 표현식이 유용할 수 있습니다.

 

 

 

정리하자면, DECODE 함수는 데이터 값이 정확히 맞거나 틀린 조건을 처리하기 쉬운 반면 CASE 함수는 조건의 범위가 다양한 경우에 쉽게 처리할 수 있습니다.

 

 

 

 

감사합니다!

반응형