Database

SQL 첫걸음 9장~10장] 정렬하기

hololo 2021. 10. 10. 17:00

##본 포스팅은 "SQL 첫걸음 - 아사이 아츠시" 책을 보고 요약한 것입니다.

손가락 왤케 까매?

정렬 - ORDER BY

SELECT 명령의 ORDER BY 구를 사용하면 검색 결과의 행 순서를 바꿀 수 있다.

ORDER BY를 사용하지 않을 경우에는 데이터베이스 내부에 저장된 순서로 반환된다.

1. ORDER BY로 검색 결과 정렬하기

SELECT * FROM table1 ORDER BY age;

ORDER BY 뒤에는 정렬하고 싶은 열을 지정한다.

기본적으로는 오름차순으로 정렬하지만 DESC를 사용하면 내림차순으로도 정렬할 수 있다.
**오름차순 : 1, 2, 3, 4...

 

2. 내림차순으로 정렬하기

SELECT * FROM table1 ORDER BY age DESC;

내림차순은 열명 뒤에 DESC를 붙여 지정한다.
**내림차순 : 10, 9, 8, 7....

오름차순은 내림차순과 달리 생략 가능하며 ASC로도 지정할 수 있다.

 

3. 대소관계

ORDER BY로 정렬할 때는 값의 대소관계가 중요한데,

  • 날짜 시간형 데이터도 수치형 데이터와 마찬가지로 숫자 크기로 판별
  • 문자열형 데이터의 대소관계는 '사전식 순서'에 의해 결정

여기서 주의할 점은, 같은 데이터(1, 2, 3, 4, 10)를 저장하더라도 수치형 데이터일 때와 문자열 데이터일 때 정렬순서는 다르다.

문자열형의 경우 -> 오름차순이면, 1/10/3/4로 반환된다.

 

ORDER BY를 이용햇 행 순서를 바꿀 수 있지만, 저장장치에 저장된 데이터의 행 순서를 변경하는 건 아니다.
어디까지나 서버에서 클라이언트로 행 순서를 바꾸어 결과를 반환하는 것이고, 참조만 할 뿐이며 변경은 하지 않는다.

 

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

1. 복수의 열로 정렬하기

하나의 열만으로는 행을 특정짓기 어려운 때가 많다.

ORDER BY 구에는 복수로 열을 지정할 수 있다.
이 때 값이 같아 순서를 결정할 수 없는 경우에는 다음으로 지정한 열명을 기준으로 정렬하는 식으로 처리된다.

출처 : https://lxxjn0-dev.netlify.app/first-step-sql-lec-10

a를 먼저 정렬하고, 값이 같은 부분은 b열로 정렬된 것을 알 수 있다.

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

 

2. 정렬방법 지정하기

각 열 뒤에 ASC나 DESC를 붙여주면 된다.

ASC를 생략해도 되지만, 문장의 가독성을 높이기 위해서라도 가능한 한 정렬 방법을 생략하지 말고 지정하도록 하자.

 

3. NULL 값의 정렬 순서

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

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

MySQL의 경우는 NULL값을 가장 작은 값으로 취급해 ASC에서는 가장 먼저 표시한다.