복수의 열을 지정해 정렬하기

유석현(SeokHyun Yu)·2022년 8월 8일
0

SQL

목록 보기
10/45
post-thumbnail

서론

데이터양이 많을 경우 하나의 열만으로는 행을 특정짓기 어려운 때가 많다.

이런 경우 복수의 열을 지정해 정렬하면 편리하다.

한편 정렬 시에는 NULL 값에 주의할 필요가 있다.

이 챕터의 마지막에 ORDER BY에서의 NULL 값의 정렬 순서에 관해 다루겠다.


1. 복수 열로 정렬 지정

ORDER BY로 행을 정렬하는 경우 같은 값을 가진 행의 순서는 어떻게 정해지는 걸까?

또 ORDER BY 구는 생략할 수 있는데, 이때 순서는 어떻게 정해질까?

미리 답을 알려주자면 '순서는 일정하지 않다'이다.

데이터베이스 서버의 당시 상황에 따라 어떤 순서로 행을 반환할지 결정된다.

따라서 언제나 같은 순서로 결과를 얻고 싶다면 반드시 ORDER BY 구로 순서를 지정해야 한다.

일반적으로 ORDER BY 구를 지정하지 않는 경향이 있으나 사실 중요한 부분이다.


ORDER BY 구에는 복수로 열을 지정할 수 있다.

SELECT 구에서 열을 여러개 지정했던 것처럼 콤마(,)로 열명을 구분해 지정하면 된다.

SELECT * FROM sample_table ORDER BY a, b;

위 명령의 경우 먼저 a 열로 정렬하고, 값이 같은 부분은 b 열로 정렬한다.


2. 정렬방법 지정하기

복수 열을 지정한 경우에도 각 열에 대해 개별적으로 정렬방법을 지정할 수 있다.

이때는 각 열 뒤에 ASCDESC를 붙여준다.

SELECT * FROM sample_table ORDER BY a ASC, b DESC;

복수 열을 지정하는 경우에도 정렬방법을 생략하면 기본값은 ASC가 된다.

하지만 데이터베이스 제품에 따라 기본값을 변경할 수도 있으므로 주의가 필요하다.


3. NULL 값의 정렬순서

NULL 값은 그 특성상 대소비교를 할 수 없어 정렬 시에는 별도의 방법으로 취급한다.

이때 '특정 값보다 큰 값', '특정 값보다 작은 값'으로 나뉘며 이 중 하나의 방법으로 대소를 비교한다.

간단히 말하자면 ORDER BY로 지정한 열에서 NULL 값을 가지는 행은 가장 먼저 표시되거나 가장 나중에 표시된다.

NULL에 대한 대소비교 방법은 표준 SQL에도 규정되어 있지 않아 데이터베이스 제품에 따라 기준이 다르다.

MySQL의 경우는 NULL 값을 가장 작은 값으로 취급해 ASC(오름차순)에서는 가장 먼저, DESC(내림차순)에서는 가장 나중에 표시한다.

profile
Backend Engineer

0개의 댓글