Goal

-Order by를 이용해 복수 열을 지정해 정렬할 수 있다.

상품코드와 해당 상품의 하위번호까지 함께 고려했을 때 비로서 하나의 행을 특정지을 수 있는 명세서 등은 복수의 열을 지정해 정렬하면 편리하다.

1. 복수 열로 정렬 지정

아래 테이블을 1-1,1-2,1-3,2-1,2-2와 같이 정렬하려 합니다. 하지만 a 열에서 1이 중복되고 있으므로 정렬이 정상적으로 되지 않습니다.

SELECT *FROM test;
a b
1 1
2 1
2 2
1 3
1 2

a 열의 값이 1인 행이 총 3개 있는데, 서로 값이 똑같아 순서를 결정할 수 없기 때문 입니다.

SELECT * FROM test ORDER BY a;
a b
1 1
1 3
1 2
2 1
2 2

복수 열을 지정하면 정렬결과가 바뀌게 됩니다. a열 같이 값이 같아 순서를 결정할 수 없는 경우에는 다음으로 지정한 열명을 기준을 정렬하는 식으로 처리 됩니다.

SELECT *FROM test ORDER BY a,b;
a b
1 1
1 2
1 3
2 1
2 2

아래와 같이 정렬 순서를 b부터 하게 되면 아래와 같은 결과가 출력되게 됩니다. 먼저 b열의 값을 기준으로 정렬되고, b열에서 값이 같은 부분은 a열의 값을 기준으로 정렬된것을 확인할 수 있습니다.

SELECT *FROM test ORDER BY b,a;
a b
1 1
2 1
1 2
2 2
1 3

2.정렬방법 지정하기

복수열을 지정할 경우에도 각 열에 대해 개별적으로 정렬방법을 지정할 수 있습니다. 이때는 각 열 뒤에 ASC,DESC를 붙여줍니다.

SELECT *FROM test ORDER BY a ASC, b DESC;
a b
1 3
1 2
1 1
2 2
2 1

※ NULL 값의 정렬 순서

 NULL값이 저장된 열을 정렬할 때는 대소비교를 할 수 없어 정렬 시에는 별도의 방법으로 취급 합니다. "특정 값보다 큰 값", "특정 값 보다 작은 값" 의 두가지로 나뉘며 이 중 하나의 방ㅂ버으로 대소를 비교 합니다.

 즉, ORDER BY로 지정한 열에서 NULL값을 가지는 행은 가장 먼저 표시되거나 가장 나중에 표시 됩니다.