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 절을 사용해야 한다.