Inflearn brand logo image

인프런 커뮤니티 질문&답변

szun님의 프로필 이미지
szun

작성한 질문수

[2025] 비전공자도 한 번에 합격하는 SQLD 올인원

null 값 정렬 위치

해결된 질문

작성

·

77

1

안녕하세요, 강의 수강중인 학생입니다.

정렬 과정에서 NULL 값이 있으면, 오름차순은 맨 아래로, 내림차순은 맨 위로

라고 교재에 작성되어 있는데, 문제 풀이에는 그 기준이 적용되는 것 같지 않아 정확하게 알고 싶습니다.

답변 1

0

데이터코드랩님의 프로필 이미지
데이터코드랩
지식공유자

안녕하세요! 데이터코드 연구소입니다.

질문 남겨주셔서 감사합니다.

우선 오라클과 PostgreSQL 에서는 널값을 가장 큰 값으로 인식합니다. 그래서 오름차순에서는 맨 끝에 정렬하구요 내림 차순에서는 맨 앞에 정렬합니다.

  • Oracle, PostgreSQL 기본 동작:

    • ORDER BY column_name ASC: NULL 값이 가장 큰 값으로 간주되어 맨 마지막(아래)에 정렬됩니다.

    • ORDER BY column_name DESC: NULL 값이 가장 큰 값으로 간주되어 (내림차순에서는 큰 값이 먼저 오므로) 맨 처음(위)에 정렬됩니다.

 

반면에 SQL Server나 MySQL은 동작방식이 점 달라서요. 널값이 가장 작은 값으로 간주됩니다. 그래서 오라클과는 반대방향으로 정렬이 되어요.

  • SQL Server, MySQL 기본 동작:

    • ORDER BY column_name ASC: NULL 값이 가장 작은 값으로 간주되어 맨 처음(위)에 정렬됩니다.

    • ORDER BY column_name DESC: NULL 값이 가장 작은 값으로 간주되어 (내림차순에서는 작은 값이 나중에 오므로) 맨 마지막(아래)에 정렬됩니다.


교재는 오라클 기준이고, 또 대부분의 시험 문제도 오라클 기준으로 나오기 때문에 널값을 가장 큰 값으로 기억하시고 오름차순이면 제일 끝에, 내림 차순이면 제일 앞에 나오는 걸로 기억하시면 되겠습니다.

만약 널 값 정렬을 원하는 데로 만들고 싶다면 명시적인 정렬구문을 사용하면 됩니다.

  • 명시적 NULL 정렬 구문 사용: SQL에서는 NULLS FIRST 또는 NULLS LAST 옵션을 사용하여 NULL 값의 정렬 위치를 명시적으로 지정할 수 있습니다. 문제에서 이러한 구문이 사용되었다면 DBMS의 기본 동작과 관계없이 명시된 대로 NULL 값이 정렬됩니다. (이 구문은 SQL:2003 표준부터 포함되었으며, 대부분의 현대 DBMS에서 지원합니다.)

    • ORDER BY column_name ASC NULLS FIRST: 오름차순 정렬 시 NULL 값을 맨 처음에 위치시킵니다.

    • ORDER BY column_name ASC NULLS LAST: 오름차순 정렬 시 NULL 값을 맨 마지막에 위치시킵니다.

    • ORDER BY column_name DESC NULLS FIRST: 내림차순 정렬 시 NULL 값을 맨 처음에 위치시킵니다.

    • ORDER BY column_name DESC NULLS LAST: 내림차순 정렬 시 NULL 값을 맨 마지막에 위치시킵니다.


시험 한 방에 합격! 응원할게요. 감사합니다.

szun님의 프로필 이미지
szun
질문자

교재의 문제에서는 널 값을 가장 큰 값으로 취급하지 않는 경우도 있어서 그러는데, 시험에서 답을 고를 때 어떤 기준으로 해야 하나요?

데이터코드랩님의 프로필 이미지
데이터코드랩
지식공유자

안녕하세요. 기본적으로 제가 드린 답변을 기준으로 하시면 됩니다.

그리고 교재의 문제 번호를 알려주시면 확인해볼게요. 감사합니다.

szun님의 프로필 이미지
szun
질문자

order by 절 파트의 연습문제였습니다!

데이터코드랩님의 프로필 이미지
데이터코드랩
지식공유자

안녕하세요.

Order by 절 파트에 아래 문제가 있네요. 아래 문제의 정답 해설을 보면 2번이 정답으로 되어 있습니다. 문제에 오라클이라는 제약이 들어갔으면 더 명확했을 텐데, 교재가 오라클 베이스로 작성이 되어 있기 때문에 정답은 2번이 맞습니다. 오라클에서는 널을 가장 큰 값으로 인식하기 때문에, 오름차순 정렬에서 가장 큰 값이 맨 아래에 나온다라고 이해하시면 되겠습니다.


5. NULL 값을 정렬할 때 기본적으로 오름차순에서 NULL 값의 위치는 어디인가?
① 맨 위
② 맨 아래
③ 중간
④ 무작위

 

감사합니다.

szun님의 프로필 이미지
szun
질문자

그럼 rank 함수로 순위를 부여하는 경우, null에는 어떤 기준으로 순위가 부여되나요? 이것도 '오라클에서 null은 가장 큰 값'이라는 기준을 따르나요?

szun님의 프로필 이미지
szun

작성한 질문수

질문하기