SQLite | 데이터 조회 | 컬럼의 값에 따라 다른 결과를 반환하는 조건부 표현식 작성 (CASE 절)
CASE 절을 사용하여 열 값에 대해 조건 분기를 수행하여 다른 값을 반환할 수 있다. 여기에서는 CASE 절을 사용한 조건문 작성 방법에 대해 설명한다.
CASE 절을 사용한 조건 분기
CASE 절을 사용한 조건부 표현식 작성 방법은 크게 나누면 두 가지 형식이 있다. 우선 첫번째 형식은 다음과 같다. 조건을 충족하는지 여부를 확인하고 값을 반환한다.
SELECT
CASE
WHEN 조건식1 THEN 결과1
WHEN 조건식2 THEN 결과2
ELSE 결과3
END
FROM 테이블명;
조건식1이 참이면 결과1을 반환하고, 조건식 1이 거짓이고 조건식2가 참이면 결과2를 반환하며, 모든 조건식이 거짓이라면 결과3을 반환한다.
–
그럼 실제로 해보도록 하겠다. 다음과 같이 테이블을 만든다.
create table exam (name text, result integer);
sqlite> create table exam (name text, result integer);
sqlite>
INSERT 문을 사용하여 테이블에 데이터를 추가한다.
insert into exam values ('devkuma', 85);
insert into exam values ('kimkc', 54);
insert into exam values ('araikuma', 78);
insert into exam values ('happykuma', 98);
insert into exam values ('mykuma', 48);
insert into exam values ('raccoon', 68);
sqlite> insert into exam values ('devkuma', 85);
sqlite> insert into exam values ('kimkc', 54);
sqlite> insert into exam values ('araikuma', 78);
sqlite> insert into exam values ('happykuma', 98);
sqlite> insert into exam values ('mykuma', 48);
sqlite> insert into exam values ('raccoon', 68);
sqlite>
그러면 CASE 절을 사용하여 result 컬럼의 값에 따라 서로 다른 3개의 데이터를 받아와 보자. 아래에서는 AS 절를 사용하여 CASE 절에서 반환되는 데이터의 컬럼명이 judgment으로 설정한다.
select
name, result,
case
when result > 80 then 'Pass'
when result > 60 then 'ReTest'
else 'Fail'
end as judgment
from exam;
sqlite> select
...> name, result,
...> case
...> when result > 80 then 'Pass'
...> when result > 60 then 'ReTest'
...> else 'Fail'
...> end as judgment
...> from exam;
name result judgment
---------- ---------- ----------
devkuma 85 Pass
kimkc 54 Fail
araikuma 78 ReTest
happykuma 98 Pass
mykuma 48 Fail
raccoon 68 ReTest
sqlite>
설정한 조건에 따라 값이 반환되었다.
CASE 절을 사용한 값 목록과 비교
이어 두번째 형식이다. 여러 값과 순차적으로 비교하여 일치하는 결과 값을 반환한다.
SELECT
CASE 표현식
WHEN 값1 THEN 결과1
WHEN 값2 THEN 결과2
ELSE 결과3
END
FROM 테이블 명;
값1과 같으면 결과1을 반환하고, 값2와 같으면 결과2를 반환하며, 어느 것에도 일치하지 않으면 결과3을 반환한다.
조건식1이 참이면 결과1을 반환하고, 조건식 1이 거짓이고 조건식2가 참이면 결과2를 반환하며, 모든 조건식이 거짓이라면 결과3을 반환한다.
–
그럼 실제로 해보도록 하겠다. 다음과 같이 테이블을 만든다.
create table company (name text, address text);
sqlite> create table company (name text, address text);
sqlite>
INSERT 문을 사용하여 테이블에 데이터를 추가한다.
insert into company values ('A_Electric', 'Seoul');
insert into company values ('B_Motor', 'California');
insert into company values ('C_Mobile', 'Suwon');
insert into company values ('D_Shipping', 'Beijing');
sqlite> insert into company values ('A_Electric', 'Seoul');
sqlite> insert into company values ('B_Motor', 'California');
sqlite> insert into company values ('C_Mobile', 'Suwon');
sqlite> insert into company values ('D_Shipping', 'Beijing');
sqlite>
그러면 CASE 절을 사용하여 address 컬럼의 값에 따라 서로 다른 데이터를 맞게 받아와 보자. 아래에서 AS 절과 사용하여, CASE 절에서 반환되는 데이터의 컬럼명 Sales으로 설정한다.
select
name, address,
case address
when 'California' then 'America'
when 'Seoul' then 'Korea'
when 'Beijing' then 'China'
else 'Unknown'
end as country
from company;
sqlite> select
...> name, address,
...> case address
...> when 'California' then 'America'
...> when 'Seoul' then 'Korea'
...> when 'Beijing' then 'China'
...> else 'Unknown'
...> end as country
...> from company;
name address country
---------- ---------- ----------
A_Electric Seoul Korea
B_Motor California America
C_Mobile Suwon Unknown
D_Shipping Beijing China
sqlite>
설정한 조건에 따라 값이 반환되었다.