본문 바로가기

Languages/SQL

[SQL] 10. 복수의 열을 지정해 정렬하기

728x90
반응형

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

ORDER BY를 통해 정렬하는 법을 알았다. 이번에는 하나의 열을 기준으로 정렬하는 것이 아닌 복수의 열을 기준으로 정렬하는 법을 알아보자. 

 

데이터의 양이 많을 경우 하나의 열만으로는 행을 특정 짓기 어려울 때가 있다. 복수의 열을 지정하여 정렬해서 문제를 해결할 수 있다. 한편 정렬 시에는 NULL 값에 주의할 필요가 있다. 

 

 

1. 복수 열로 정렬 지정

ORDER BY로 행을 정렬하는 경우 같은 값을 가진 행의 순서는 일정하지 않다. 데이터베이스 서버의 당시 상황에 따라 어떤 순서로 행을 반환할지 결정된다. 따라서 언제가 같은 순서로 결과를 얻고 싶다면 반드시 ODER BY로 순서를 지정해야 한다. 

 

ORDER BY를 지정해도 1개의 열만으로는 정확한 순서를 결정할 수 없는 경우도 있다. 다음 sample32 테이블을 살펴보자.

a열과 b열 모두 INTEGER 형이며 b열은 a열의 하위 번호이다. 열의 상관관계에 맞춰 오름차순으로 정렬하려고 한다. 먼저 a열에 대해서만 ORDER BY를 사용해본다.

 

a열에 대해서는 정렬이 되었지만 b열에 대해서는 전혀 정렬이 되지 않은 모습을 볼 수 있다. b의 값까지 고려하여 정렬하기 위해서 ORDER BY로 복수 열을 지정하는 것이 필요하다. 

 

ORDER BY로 복수 열 지정하기

ORDER BY에는 복수로 열을 지정할 수 있다. 콤마로 열명을 구분하여 지정하면 된다.

SELCET 열명 FROM 테이블명 ORDER BY 열명1, 열명2...

 

복수 열을 지정하면 정렬결과를 바꿀 수 있으며 정렬 순서의 우선순위는 지정한 열 명의 순서에 따른다. 이를 바탕으로 sample32를 다시 정렬해보자.

a열뿐만 아니라 b열도 오름차순으로 잘 정렬된 것을 볼 수 있다. 만약 지정 순서를 바꾸면 어떻게 될까? a와 b의 지정 순서를 바꾸게 되면 정렬 우선순위가 b가 더 높아져서 b열을 기준으로 먼저 정렬한 후 a의 순서를 고려한다.

 

 

2. 정렬방법 지정하기

복수 열을 지정한 경우에도 각 열에 대해 개별적으로 정렬방법을 지정할 수 있다. 각 열 뒤에 ASC나 DESC를 붙여준다. sample32에 대해서 a열에는 ASC로 b열에는 DESC로 정렬해보자.

a열에 대해서는 오름차순, b열에 대해서는 내림차순으로 정렬된 것을 볼 수 있다. 각 열 뒤에 별도로 지정하지 않으면 기본적으로 ASC로 정렬된다. 

 

 

3. NULL 값의 정렬순서

NULL의 경우 대소비교를 할 수 없어 별도의 방법으로 취급한다. '특정 값보다 큰 값' 혹은 '특정 값보다 작은 값' 중 하나로 결정하며 대소를 비교한다. 

 

즉 NULL 값을 가지는 행은 가장 먼저 표시되거나 가장 나중에 표시된다. 단 NULL에 대한 대소 비교 방법은 표준 SQL에 규정되어 있지 않아서 데이터베이스 제품에 따라 기준이 다르다. MySQL의 경우 NULL 값을 가장 작은 값으로 취급하여 ASC로 정렬할 경우 가장 먼저 표시된다.

728x90
반응형

'Languages > SQL' 카테고리의 다른 글

[SQL] 12. 수치 연산  (0) 2021.07.20
[SQL] 11. 결과 행 제한하기 - LIMIT  (0) 2021.06.22
[SQL] 9. 정렬 - ORDER BY  (0) 2021.05.08
[SQL] 8. 패턴 매칭에 의한 검색  (0) 2021.04.12
[SQL] 7. 여러가지 조건  (0) 2021.03.15