[DataBase] Order by에서 null 값 처리

비즈니스 로직을 구현함에 있어 null 값의 조회되는 순서를 정하고 싶을때가 있다. 예를 들어 order by로 가져온 데이터에서 null 값이 아닌 데이터를 처리하고 null값을 최후의 선택지로 차선을 선택을 하는 경우이다. 이번 글에서는 각 DBMS에서 null값을 order by 구문으로 조회 시 삽입되는 위치에 대해 알아보자.

 

DBMS 별 기본 설정 값

DBMS 마다 Null에 대한 sorting하는 방식을 기본으로 정해진 룰대로 진행한다. 아래 각각에 대한 설명이다.

PostgreSQL, Oracle

여기서는 Null값을 모든 유효한 값뒤에 위치 하게 된다.

SQLite, MySQL,MSSQL

Null은 모든 값보다 작은 값으로 처리된다.

 

기본 Order과 다르게 처리

위에서 나열한 방식과 다르게 사용하려면 DBMS별로 처리하면 방법이 다르다.

PostgreSQL, Oracle, SQLite

Null에 대한 위치를 Query문으로 명시가 가능하다.

select * from product order by credate_date NULLS FIRST;

MySQL ,MSSQL

위의 방식처럼 Null에 대한 처리를 따로 제공하지 않는다. 작은 트릭으로 이 문제를 해결 할 수 있다. number로 된 필드는 앞에 -를 붙힌 후 역순으로 조회하면 Null 값들을 수자 뒤로 배치 시킬 수 있다.

select * from product order by -number desc;

다른 방식으로는 먼저 Null 필드를 가려낸 후 다시 order by 하는 방식이다. 이 방식은 모든 타입의 필드에 대하여 모두 적용이 가능 하다.

select * from procduct order by factory IS NULL, factory