본문 바로가기
프로그래밍/SQL 함수 쌓기

NULL 혹은 빈 문자열 제외 하는 방법들 ( 함수 / LENGTH )

by 멀티코린 2020. 9. 28.

종종 데이터를 처리할 때

null을 제외한 값, 빈 문자열을 제외한 값 
혹은 null 값만, 빈 문자열 값만 불러와야 할 때가 있다.

일반적으로, 우리가 아는 그 방법으로 하면 된다.

하지만 종종 어떤 DB를 쓰냐에 따라 DB에서 null 혹은 빈값을 처리하는 방식이 달라서 쿼리 작성 시에도 꼭 유의해야 할 필요가 있다.


 

NULL 값만 불러오기

 

의미 : a1 컬럼의 값이 null 인 경우만 가져와라

---방법 1.
SELECT
FROM db_name
WHERE a1 is null ---- a1컬럼의 null값만

의미 : a1 컬럼의 값이 빈 값인 경우만 가져와라

---방법 2.
SELECT
FROM db_name
WHERE a1='' ---- a1컬럼의 null 값만 

 


의미 : a1 컬럼에 있는 값의 길이가 0인 경우만 가져와라
 - 값이 null 혹은 빈값이라는 것은 값의 길이가 0이라는 것과 같기 때문에 이렇게 추출 조건을 넣어도 위와 동일한 결과를 얻을 수 있다
 - 최근 쿼리를 짜면서 null이 인식되지 않아서 어떻게 해결할 수 있을까 고민하다가 찾은 방법
 - 분명 가장 쉬운 함수이지만 쿼리 상에서 활용이 필요할 때 지나칠 수 있는 함수와 방법인 듯해서 알아두면 좋을 듯한 유용한 방법이라는 생각이 든다.

---방법 3.
SELECT
FROM db_name
WHERE length(a1)=0 ---- a1컬럼의 null 값만 

 

 

 

NULL 이외의 값만 불러오기

의미 : a1 컬럼의 값이 null이 아닌 경우만 가져와라

---방법 1.
SELECT
FROM db_name
WHERE a1 is not null ---- a1컬럼의 null이 아닌

의미 : a1 컬럼의 값이 빈 값이 아닌 경우만 가져와라

---방법 2.
SELECT
FROM db_name
WHERE a1!='' ---- a1컬럼의 null 이외의 값만

 


의미 : a1 컬럼에 있는 값의 길이가 1보다 크거나 같은 경우만 가져와라
 - 값이 null 혹은 빈값이 아니라는 것은 값의 길이가 1보다 크거나 같은 것과 같기 때문에 이렇게 추출 조건을 넣어도 위와 동일한 결과를 얻을 수 있다
 - 분명 가장 쉬운 함수이지만 쿼리 상에서 활용이 필요할 때 지나칠 수 있는 함수와 방법인 듯해서 알아두면 좋을 듯한 유용한 방법이라는 생각이 든다.

---방법 3.
SELECT
FROM db_name
WHERE length(a1)>=1 ---- a1컬럼의 길이가 1보다 크거나 같은 경우만

 


포스팅하게 된 이유

위와 같은 방식이 모든 DB에서 동일한 결과를 주지 않는다. 그 이유는 DB마다 NULL과 빈값에 대한 처리 방식이 다르기 때문이다.

나도 여러 DB를 쓰다보니 헷갈리기 때문에 항상 결과 정합성을 체크하는 습관을 가지고 있다.
그런데 아무리 is not null 이라고 입력을 해도 값이 없는 케이스가 포함되서 추출 되는 것이다. 대용량의 데이터를 가지고 쿼리를 하던 터라 검증에 시간을 엄청 쏟아부었는데 그 이유를 찾아보니 DB마다 차이점이 있다는 걸 짚고 넘어갈 수 있게 되었다.

데이터 분석가라면 혹은 엔지니어라면 항상 데이터 정합성을 체크하는 습관은 필수 인 것 같다.
더불어 놓치기 쉬운 함수의 활용 사례도 알아두고 가면 좋을 것 같다.

 

 

NULL과 빈 값을 잘 다루는 것에 대한 중요성을 깨닫는 검증의 시간이였다.

 

 

 

댓글