반응형
오늘은 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 함수는 조건의 범위가 다양한 경우에 쉽게 처리할 수 있습니다.
감사합니다!
반응형
'💻 IT > 📌 DataBase' 카테고리의 다른 글
[DB/Join] 조인이란? 동등조인과 외부조인 ( Inner Join, Outer Join) (21) | 2022.04.26 |
---|---|
[DB/Oracle] ORA-00904 : 부적합한 식별자 invalid identifier (4) | 2022.03.03 |
[SQL 연산자] IN 구문 :: OR 기능을 하는 IN 연산자 (3) | 2021.06.15 |
[SQL 연산자] BETWEEN 연산자 :: 범위, 구간검색 연산자 (0) | 2021.06.14 |
[ORACLE DB] SYSTEM 계정 lock 해제와 비밀번호 변경방법 (0) | 2021.06.14 |