해결된 질문
작성
·
78
답변 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
값을 맨 마지막에 위치시킵니다.
시험 한 방에 합격! 응원할게요. 감사합니다.
안녕하세요.
Order by 절 파트에 아래 문제가 있네요. 아래 문제의 정답 해설을 보면 2번이 정답으로 되어 있습니다. 문제에 오라클이라는 제약이 들어갔으면 더 명확했을 텐데, 교재가 오라클 베이스로 작성이 되어 있기 때문에 정답은 2번이 맞습니다. 오라클에서는 널을 가장 큰 값으로 인식하기 때문에, 오름차순 정렬에서 가장 큰 값이 맨 아래에 나온다라고 이해하시면 되겠습니다.
5. NULL 값을 정렬할 때 기본적으로 오름차순에서 NULL 값의 위치는 어디인가?
① 맨 위
② 맨 아래
③ 중간
④ 무작위
감사합니다.
교재의 문제에서는 널 값을 가장 큰 값으로 취급하지 않는 경우도 있어서 그러는데, 시험에서 답을 고를 때 어떤 기준으로 해야 하나요?