ORDER BY 시 NULL 값 정렬

journey·2025년 2월 12일

프로젝트를 수행하며 NULL을 포함한 데이터값을 조회한 서비스가 있는데
화면에 조회시 NULL 데이터가 먼저 나와 깔끔해 보이지 않았다.

ORDER BY 적용 시, DBMS 마다 NULL의 정렬 순서가 다른데
ORACLE의 경우 NULL을 마지막으로 정렬한다.

->
오름차순(ASC)의 경우 NULL을 마지막으로
내림차순(DESC)의 경우 NULL을 처음으로 정렬

내가 조회한 컬럼은 DESC가 적용되어 있었기 때문에 NULL값이여도 먼저 조회가 되었다.

그렇다면 NULL의 위치를 조절하는 방법은?
-> NULLS FIRST와 NULLS LAST를 활용

  • NULLS FIRST: 정렬하고자 하는 NULL 데이터들을 데이터 앞에 나오게 한다.
  • NULLS LAST: 정렬하고자 하는 NULL 데이터들을 데이터 뒤에 나오게 한다.

적용전

-- 예시
SELECT 
   substr(S.sno,1,1)sno1, 
   substr(S.sno,2,2)sno2, 
   substr(S.sno,4,2)sno3, 
   S.sname, E.ekor, E.emath, E.eeng, E.ehist ,
   (E.ekor+E.emath+E.eeng+E.ehist) total
FROM student_tbl_03 S 
   LEFT JOIN 
     exam_tbl_03 E 
ON S.sno = E.sno 
ORDER BY total DESC;

/*
출력화면

SNO1 SNO2 SNO3 SNAME EKOR EMATH EENG EHIST TOTAL


1 01 03 장믿음
1 01 05 진평화
1 01 06 차공단
1 01 04 최사랑
1 01 01 김행복 98 91 95 90 374
1 01 02 이축복 87 89



> 적용 후

-- 예시
SELECT
substr(S.sno,1,1)sno1,
substr(S.sno,2,2)sno2,
substr(S.sno,4,2)sno3,
S.sname, E.ekor, E.emath, E.eeng, E.ehist ,
(E.ekor+E.emath+E.eeng+E.ehist) total
FROM student_tbl_03 S
LEFT JOIN
exam_tbl_03 E
ON S.sno = E.sno
ORDER BY total DESC NULLS LAST;

/*
출력화면

SNO1 SNO2 SNO3 SNAME EKOR EMATH EENG EHIST TOTAL


1 01 01 김행복 98 91 95 90 374
1 01 02 이축복 87 89 92 82 350
1 01 05 진평화
1 01 04 최사랑
1 01 06 차공단
1 01 03 장믿음



참고참고
[링크텍스트](https://yunamom.tistory.com/210)
profile
개발 여정

0개의 댓글