Home » SQL » BASIC » sql order by 절을 알아보고 여러개 정렬도 해 봅시다.

sql order by 절을 알아보고 여러개 정렬도 해 봅시다.

안녕하세요. SQL 기본 시리즈 중 2번째 글입니다. 이번 시간에는 sql order by 절과, 여러개의 컬럼 (기준)이 들어왔을 때 정렬을 하는 방법도 알아보겠습니다.

  • from 절과 카티션 곱에 대해 알아봅시다. 링크
  • order by 절에 대해 알아봅시다. [현재글]
  • group by 절에 대해 알아봅시다. 링크
  • having에 대해 알아보고 where 절과의 차이점에 대해 알아봅시다. 링크
  • select 절과 as에 대해 알아봅시다. 링크

sql order by 절 사용하기

먼저, order by는 결과를 정렬하는 연산입니다. 보통 아래와 같이 씁니다.

order by column1 {asc or desc}, …

column1의 값을 기준으로 정렬합니다. 오름차, 혹은 내림차로.
  • asc
    • 오름차순으로 정렬합니다.
  • desc
    • 내림차순으로 정렬합니다.

필드명 뒤에 asc, desc 등을 붙일 수 있는데요. 각각 오름차순과 내림차순을 의미합니다.

[그림 1] 실습에 사용될 데이터

book 테이블에 있는 데이터를 봅시다. 그러면, title과 id, author_id가 눈에 보입니다. 각각 책의 제목과 id, 작가의 id를 의미합니다. 우리는 author_id 오름차순으로 정렬하고 싶습니다. 그러면 어떻게 적어주면 될까요?

order by 다음에 정렬할 기준이 되는 컬럼 이름인, author_id를 적어주면 됩니다.

[그림 2] 1번 쿼리의 결과

order by author_id를 하니까 어떤가요? 작가 id가 정렬 기준이 되어서 오름차순으로 되었음을 볼 수 있어요. 그러면, 반대로 작가 id 내림차순으로 정렬하려면 어떻게 하면 될까요?

[그림 3] 2번 쿼리

order by 무엇을 기준으로 정렬할 건가요? author_id요. 그런데 어떻게 할 거에요? 내림차순. desc를 뒤에 적어주면 되겠네요. 즉, order by author_id desc 요래 적어주시면 됩니다. 여기까지 다시 정리해 봅시다.

  • 어떤 컬럼을 정렬 기준으로?
    • author_id
  • 오름차순? 아니면 내림차순?
    • desc (내림차순)이요.

이 내용을 그대로 2번 쿼리에 적었습니다.

[그림 4] 2번 쿼리의 결과

결과 볼까요? 아까와는 다르게 author_id 내림차 순으로 정렬되었음을 볼 수 있어요.


order by 여러개

그러면 정렬 기준이 여러 개 있는 경우에는 어떻게 처리하죠? 예를 들자면, title 오름차순으로 정렬하는데, title이 같으면 author_id 내림차순으로 정렬한다던지. 생각보다 자주 보이는 패턴이지요. 이 때에는, 콤마로 구분지으면 됩니다. 1순위가 먼저, 2순위가 그 다음으로 오게 하면 됩니다. 어떤 이야기인지 볼게요. 저는 title 오름차순으로 정렬할 건데요. title이 같으면 author_id 내림차순으로 할 거에요. 그러면, 정렬 기준이 어떻게 되나요?

  • title 오름차순으로 정렬할 건데요.
    • 이것을 1순위 정렬 기준이라고 합니다.
  • title만 가지고 order를 판단할 수 없으면, author_id 내림차순으로 정렬할 거에요.
    • 이건 2순위네요.

그런가요? 이걸 쿼리로 변환하면 어떻게 될까요?

[그림 5] 3번 쿼리

보면 order by title이 먼저 왔어요. 이는 title 오름차순을 의미해요. 그 다음에 콤마로 구분되었네요? 이는 sort 기준이 여러 개 있다는 의미입니다. 만약에 title이 같다면 author_id 기준을 탄다는 것입니다. 어떻게 타나요? desc. 내림차로 타겠지요. 여기까지 정리합시다.

  • title
    • title 오름차순으로 정렬할 거에요.
  • author_id desc
    • title을 가지고 order를 판단할 수 없으면, author_id를 가지고 판단할 거에요.
    • desc니까 내림차순이겠군요.

이제 이 상황을 그림으로 그려 봅시다.

원래 데이터는 요래 들어 있습니다. 먼저 1번째 정렬 기준이 title이란 말이지요. 이것을 기준으로만 정렬했다면 아래와 같이 되었을 겁니다.

그런데, id가 3인 레코드와 4인 레코드의 title이 math로 같지요? 1번째 정렬 기준만 가지고 순서를 판단할 수 없어요. 왜냐하면 두 레코드의 title이 같기 때문입니다. 2번째 정렬 기준은 author_id라 되어 있는데요. desc, 즉 내림차순으로 들어가게 되어 있습니다.

이것까지 적용하면, 결과가 위와 같이 나옵니다. title은 math로 같았지만, author_id가 다르기 때문에, 제목이 title이고, author_id가 7인 레코드가 먼저 나오는 것입니다.

[그림 6] 3번 쿼리의 결과

결과를 보면 위와 같이 나왔음을 볼 수 있습니다. 여기까지 정리하면, 정렬 기준이 여러 개 나올 경우에는 콤마로 구분 지어주면 된다는 것입니다.

Leave a Comment

15 + 19 =