안녕하세요. 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 등을 붙일 수 있는데요. 각각 오름차순과 내림차순을 의미합니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/ord_b1.png)
book 테이블에 있는 데이터를 봅시다. 그러면, title과 id, author_id가 눈에 보입니다. 각각 책의 제목과 id, 작가의 id를 의미합니다. 우리는 author_id 오름차순으로 정렬하고 싶습니다. 그러면 어떻게 적어주면 될까요?
order by 다음에 정렬할 기준이 되는 컬럼 이름인, author_id를 적어주면 됩니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/ord_b2.png)
order by author_id를 하니까 어떤가요? 작가 id가 정렬 기준이 되어서 오름차순으로 되었음을 볼 수 있어요. 그러면, 반대로 작가 id 내림차순으로 정렬하려면 어떻게 하면 될까요?
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/ord_b3.png)
order by 무엇을 기준으로 정렬할 건가요? author_id요. 그런데 어떻게 할 거에요? 내림차순. desc를 뒤에 적어주면 되겠네요. 즉, order by author_id desc 요래 적어주시면 됩니다. 여기까지 다시 정리해 봅시다.
- 어떤 컬럼을 정렬 기준으로?
- author_id
- 오름차순? 아니면 내림차순?
- desc (내림차순)이요.
이 내용을 그대로 2번 쿼리에 적었습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/ord_b4.png)
결과 볼까요? 아까와는 다르게 author_id 내림차 순으로 정렬되었음을 볼 수 있어요.
order by 여러개
그러면 정렬 기준이 여러 개 있는 경우에는 어떻게 처리하죠? 예를 들자면, title 오름차순으로 정렬하는데, title이 같으면 author_id 내림차순으로 정렬한다던지. 생각보다 자주 보이는 패턴이지요. 이 때에는, 콤마로 구분지으면 됩니다. 1순위가 먼저, 2순위가 그 다음으로 오게 하면 됩니다. 어떤 이야기인지 볼게요. 저는 title 오름차순으로 정렬할 건데요. title이 같으면 author_id 내림차순으로 할 거에요. 그러면, 정렬 기준이 어떻게 되나요?
- title 오름차순으로 정렬할 건데요.
- 이것을 1순위 정렬 기준이라고 합니다.
- title만 가지고 order를 판단할 수 없으면, author_id 내림차순으로 정렬할 거에요.
- 이건 2순위네요.
그런가요? 이걸 쿼리로 변환하면 어떻게 될까요?
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/ord_b5.png)
보면 order by title이 먼저 왔어요. 이는 title 오름차순을 의미해요. 그 다음에 콤마로 구분되었네요? 이는 sort 기준이 여러 개 있다는 의미입니다. 만약에 title이 같다면 author_id 기준을 탄다는 것입니다. 어떻게 타나요? desc. 내림차로 타겠지요. 여기까지 정리합시다.
- title
- title 오름차순으로 정렬할 거에요.
- author_id desc
- title을 가지고 order를 판단할 수 없으면, author_id를 가지고 판단할 거에요.
- desc니까 내림차순이겠군요.
이제 이 상황을 그림으로 그려 봅시다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/ord_b7.png)
원래 데이터는 요래 들어 있습니다. 먼저 1번째 정렬 기준이 title이란 말이지요. 이것을 기준으로만 정렬했다면 아래와 같이 되었을 겁니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/ord_b8.png)
그런데, id가 3인 레코드와 4인 레코드의 title이 math로 같지요? 1번째 정렬 기준만 가지고 순서를 판단할 수 없어요. 왜냐하면 두 레코드의 title이 같기 때문입니다. 2번째 정렬 기준은 author_id라 되어 있는데요. desc, 즉 내림차순으로 들어가게 되어 있습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/ord_b9.png)
이것까지 적용하면, 결과가 위와 같이 나옵니다. title은 math로 같았지만, author_id가 다르기 때문에, 제목이 title이고, author_id가 7인 레코드가 먼저 나오는 것입니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/ord_b6.png)
결과를 보면 위와 같이 나왔음을 볼 수 있습니다. 여기까지 정리하면, 정렬 기준이 여러 개 나올 경우에는 콤마로 구분 지어주면 된다는 것입니다.