SQLite | SQLite 함수 | 값이 NULL인 경우에 지정된 다른 값을 반환 (ifnull 함수, coalesce 함수)

ifnull 함수를 사용하면 첫 번째 인수의 값이 NULL 인 경우 두 번째 인수의 값을 반환해 준다. coalesce 함수도 동일하게 동작한다. 여기에서는 ifnull 함수 및 coalesce 함수의 사용법에 대해 설명한다.

ifnull 함수와 coalesce 함수 사용법

ifnull 함수는 첫 번째로 지정된 인수의 값이 NULL 인 경우에 두 번째 인수의 값을 반환한다. 형식은 다음과 같다.

ifnull(값1, 값2)

coalesce 함수는 첫번째부터 n-1번째 인수의 값 중 처음 NULL이 아닌 값을 반환한다. 모든 NULL인 경우에는 마지막 n번째 인수의 값을 반환한다. 형식은 다음과 같다.

coalesce (값1, 값2, ..., n값)

ifnull 함수는 coalesce 함수에 인수를 2개로 한 경우와 동일하다.

그러면 실습을 해보도록 하겠다. 먼저 다음과 같이 테이블을 만든다.

create table user (id integer, name text, address text);
sqlite> create table user (id integer, name text, address text);
sqlite> 

INSERT 문을 사용하여 다음과 같이 데이터를 추가한다.

insert into user values (1, 'devkuma', 'Seoul');
insert into user values (2, 'kimkc', NULL);
insert into user values (3, 'araikuma', 'Busan');
insert into user values (4, NULL, 'Paju');
insert into user values (5, NULL, NULL);
sqlite> insert into user values (1, 'devkuma', 'Seoul');
sqlite> insert into user values (2, 'kimkc', NULL);
sqlite> insert into user values (3, 'araikuma', 'Busan');
sqlite> insert into user values (4, NULL, 'Paju');
sqlite> insert into user values (5, NULL, NULL);
sqlite> 

그러면 ifnull 함수를 사용하여 name 컬럼에 저장되는 값이 NULL아 아닌 경우는 name 컬럼의 값을 반환하고 NULL 인 경우에 ‘NoName’를 반환하려고 한다.

select id, ifnull(name, 'NoName') from user;
sqlite> .mode column
sqlite> .header on
sqlite> 
sqlite> select id, ifnull(name, 'NoName') from user;
id          ifnull(name, 'NoName')
----------  ----------------------
1           devkuma               
2           kimkc                 
3           araikuma              
4           NoName                
5           NoName                
sqlite> 

name 컬럼에 NULL이 아닌 값이 저장되어 있으면 그 값을 반환하고 NULL 인 경우에는 지정한 값을 반환하였다.

다음은 coalesce 함수를 사용하여 name 컬럼에 저장되는 값이 NULL이 아닌 경우에 name 컬럼의 값을 반환하고, name 컬럼의 값이 NULL 인 경우에는 address 컬럼 값를 반환하며, address 컬럼의 값이 NULL이 아닌 경우에는 address 컬럼의 값을 NULL 인 경우에는 ‘NoName’를 반환하려고 한다.

select id, coalesce(name, address, 'NoName') from user;
sqlite> select id, coalesce(name, address, 'NoName') from user;
id          coalesce(name, address, 'NoName')
----------  ---------------------------------
1           devkuma                          
2           kimkc                            
3           araikuma                         
4           Paju                             
5           NoName                           
sqlite> 

name 컬럼과 address 컬럼의 값을 조회하여 먼저 NULL이 아닌 값을 받아오고, 모두 NULL 인 경우에는 지정한 값을 받아올 수 있었다.




최종 수정 : 2019-11-13