SQLite | 데이터 조회 | 값이 NULL 인 데이터 조회 (IS NULL)


조건식을 작성할 때 IS NULL 절을 사용하면 컬럼이 NULL과 일치하는지 여부의 조건식을 작성할 수 있다. 여기에서는 IS NULL 절을 사용한 조건부 표현식에 대한 작성 방법을 설명한다.

조건식을 작성할 때 사용하는 WHERE 절에 대해서는 조회할 데이터의 조건 설정 (WHERE 절)를 참조한다.

IS NULL 절을 사용한 조건부 표현식 작성

IS NULL 절을 사용하면 컬럼이 NULL과 일치하는지 여부의 조건식을 작성할 수 있다. 형식은 다음과 같다.

SELECT 컬럼명, ... FROM 테이블명 WHERE 컬럼 IS NULL;

컬럼의 값이 NULL 데이터만 가져온다. IS NULL 대신 ISNULL도 사용할 수 있다.

또한 컬럼의 값이 NULL이 아닌 데이터를 검색하려면 IS NOT NULL 절을 사용한다.

SELECT 컬럼명, ... FROM 테이블명 WHERE 컬럼 IS NOT NULL;

컬럼의 값이 NULL이 아닌 데이터만 가져온다. IS NOT NULL 대신 NOTNULL과 NOT NULL도 사용할 수 있다.

그럼 실제로 해보도록 한다. 다음과 같이 테이블을 만든다.

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, 'happykuma', 'Daejeon');
insert into user values (5, 'mykuma', 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, 'happykuma', 'Daejeon');
sqlite> insert into user values (5, 'mykuma', null);
sqlite> 

조회할 데이터의 조건을 지정하지 않고 데이터를 조회하면 다음과 같다. address 컬럼에 null가 포함되어있는 데이터가 있다.

select * from user;
sqlite> select * from user;
id          name        address   
----------  ----------  ----------
1           devkuma     Seoul     
2           kimkc                 
3           araikuma    Busan     
4           happykuma   Daejeon   
5           mykuma                
sqlite> 

그럼 IS NULL 절을 사용하여 address 컬럼의 값에 null이 저장된 데이터만 조회해 보자.

select * from user where address is null;
sqlite> select * from user where address is null;
id          name        address   
----------  ----------  ----------
2           kimkc                 
5           mykuma                
sqlite> 

컬럼에 null이 포함되어 있는 데이터를 받아올 수 있었다.

이번에는 IS NOT NULL 절을 사용하여 방금 전과는 반대로 컬럼의 값이 null가 아닌 데이터를 조회해 보자.

select * from user where address is not null;
sqlite> select * from user where address is not null;
id          name        address   
----------  ----------  ----------
1           devkuma     Seoul     
3           araikuma    Busan     
4           happykuma   Daejeon   
sqlite> 

컬럼에 null이 포함되지 않은 데이터를 받아올 수 있었다.

등호(=) 연산자를 사용하여 컬럼의 값을 null과 비교하면 오히려 정확한 결과는 조회되지 않는다. 다음과 같이 몇 가지 SELECT 문을 실행하고 있다.

select * from user where address = null;
select * from user where address = NULL;
select * from user where address = '';
sqlite> select * from user where address = null;
sqlite> select * from user where address = NULL;
sqlite> select * from user where address = '';
sqlite> 

어느 경우도 데이터를 조회할 수 없다. 이렇게 값이 NULL인지 여부를 확인하려면 IS NULL 절을 사용해야 한다.