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 인 경우에는 지정한 값을 받아올 수 있었다.