All Articles

SQL 첫걸음 - 9강 정렬 - ORDER BY, 10강 복수의 열을 지정해 정렬하기

9강 정렬 - ORDER BY

ORDER BY로 검색 결과 정렬하기

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

  • 오름차순으로 정렬

    SELECTFROM 테이블 WHERE 조건식 ORDER BYASC;
  • 내림차순으로 정렬

    SELECTFROM 테이블 WHERE 조건식 ORDER BYDESC;

검색 조건이 필요없으면 WHERE 구를 생략한다.

address_table

name age address
곰돌이 3 서울특별시 동대문구
야옹이 2 제주특별자치도 서귀포시 표선면
멍멍이 5 경기도 용인시 수지구
  • 이름 기준으로 오름차순 정렬하기

    SELECT * FROM address_table ORDER BY name ASC;
name age address
곰돌이 3 서울특별시 동대문구
멍멍이 5 경기도 용인시 수지구
야옹이 2 제주특별자치도 서귀포시 표선면
  • 나이 기준으로 내림차순 정렬하기

    SELECT * FROM address_table ORDER BY age DESC;
name age address
멍멍이 5 경기도 용인시 수지구
곰돌이 3 서울특별시 동대문구
야옹이 2 제주특별자치도 서귀포시 표선면

대소관계

  • 수치형 데이터, 날짜형 데이터 : 숫자 크기로 판별

    • 1 < 2 < 10 < 100
    • 1999 < … < 2013 < … < 2020
  • 문자열형 데이터 : 사전식 순서(ABC순, 가나다순)

    • 가방 < 가족 < 나비
    • car < flower < glasses

사전식 순서에서 주의할 점

수치형 데이터와 문자열형 데이터의 정렬 방식이 다르므로 주의해야 한다.

  • 1, 2, 3, 10, 20이 수치형 데이터일 때 오름차순 정렬은 1, 2, 3, 10, 20이다.
  • 1, 2, 3, 10, 20이 문자열형 데이터일 때 오름차순 정렬은 1, 10, 2, 20, 3이다.

ORDER BY 명령어는 서버에서 클라이언트로 행 순서를 바꿔서 결과를 반환하는 것이지, 데이터베이스에 저장된 테이블을 바꾸는 것이 아니다.

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

복수 열로 정렬 지정

SELECTFROM 테이블 WHERE 조건식 ORDER BY1 [ASC|DESC],2 [ASC|DESC] ...;

sample_table

no a b
1 1 1
2 2 1
3 2 2
4 1 3
5 1 2

sample_table에서 a열을 기준으로 ORDER BY 했을 때 no 1, 4, 5에 해당하는 행과 no 2, 3에 해당하는 행은 각각 어떤 순서로 리턴될까? 당시 데이터베이스 서버 상황에 따라 다르다. 따라서 원하는 순서가 있다면 ORDER BY 복수 열 정렬을 통해 명확하게 지정해주는 것이 좋다.

만약 a열을 기준으로 정렬한 행이 b열 값 오름차순으로 정렬되길 원한다면,

SELECT * FROM sample_table ORDER BY a ASC, b ASC;
no a b
1 1 1
5 1 2
4 1 3
2 2 1
3 2 2

a열을 기준으로는 오름차순, b열을 기준으로는 내림차순으로 정렬하는 것도 가능하다.

SELECT * FROM sample_table ORDER BY a ASC, b DESC;
no a b
4 1 3
5 1 2
1 1 1
3 2 2
2 2 1

b열을 우선 정렬하고 그 다음 a열을 정렬하는 것도 가능하다.

SELECT * FROM sample_table ORDER BY b ASC, a ASC;
no a b
1 1 1
2 2 1
5 1 2
3 2 2
4 1 3

MySQL에서 ORDER BY 방식 기본값은 오름차순(ASC)이지만, DBMS에 따라 내림차순(DESC)이 기본 정렬 방식일 수도 있다. 따라서 정렬 방식은 명시해주는 것이 좋다.

NULL값의 정렬순서

NULL은 대소비교를 할 수 없는 값이므로 별도 방법으로 취급한다. DBMS에 따라 ‘특정 값보다 큰 값’ 또는 ‘특정 값보다 작은 값’으로 분류한다.

NULL을 ‘특정 값보다 큰 값’으로 취급하는 데이터베이스에서는 NULL을 가장 마지막으로 정렬한다(오름차순 기준). 반대로, ‘특정 값보다 작은 값’ 취급하는 데이터베이스에서는 가장 먼저 NULL을 반환한다.

MySQL은 NULL을 ‘특정 값보다 작은 값’으로 취급해, 오름차순에서는 가장 먼저, 내림차순에서는 가장 나중에 NULL을 표시한다.