본문 바로가기
CS/DB

정렬 (ORDER BY)

by 넬준 2021. 12. 3.

ORDER BY 열명 DESC : 내림차순

ORDER BY 열명 ASC : 오름차순

 

ASC, DESC 지정하지 않은 경우 디폴트는 ASC(오름차순)이다.

 

대소관계

문자열형 데이터는 사전식 순서로 대소관계를 결정한다.

(abc, ㄱㄴㄷ 순)

 

수치형과 문자열형은 대소관계 비교 방법이 다르다.

 

예}

a(VARCHAR형) b(INTEGER형)
1 1
2 2
10 10
11 11

이와 같은 테이블이 있다고 하자.

 

SELECT * FROM table ORDER BY a;

 

결과

 

a(VARCHAR형) b(INTEGER형)
1 1
10 10
11 11
2 2

 

SELECT * FROM table ORDER BY b;

 

결과 

 

a(VARCHAR형) b(INTEGER형)
1 1
2 2
10 10
11 11

 

a열은 VARCHAR형 즉, 문자열형이기 때문에, 대소관계를 사전식 순서로 비교했다.

따라서 1로 시작하는 열값들이 먼저 정렬된 것이다.

b열은 수치으로 일반적인 숫자 대소관계로 비교했기 때문에 2가 10, 11보다 먼저 정렬되었다.

 

 

ORDER BY로 테이블을 정렬했다고 하더라도 저장장치에 저장된 데이터 행 순서 자체를 바꾼 것은 아니다.

SELECT 또한 테이블의 데이터를 참조만 할 뿐이지 실제로 변경을 하지는 않는다.

 

 

복수 열로 정렬

하나의 열만으론 원하는 정렬 순서를 얻지 못할 경우, 여러 열을 이용해 정렬할 수 있다.

 

ORDER BY 열1, 열2;

 

각 열마다 정렬방법을 지정할 수 있다. (ASC | DESC, 생략 시 ASC)

 

ORDER BY 열1 DESC, 열2

 

정렬 순서는 지정한 열명의 순서를 따른다.

먼저 적힌 열로 정렬 후, 이 때 해당 열의 값이 같아 순서를 결정할 수 없을 땐 다음 열을 기준으로 정렬한다.

 

ORDER BY 열1, 열2 DESC;
ORDER BY 열2 DESC, 열1;

 

위 두 정렬은 서로 다른 정렬 순서를 갖게 된다.

 

정렬 기준인 열의 값이 NULL인 경우, MySQL에서는 NULL값을 가장 작은 값으로 취급해 ASC에선 가장 먼저 표시한다.

'CS > DB' 카테고리의 다른 글

데이터 추가, 갱신, 삭제 - INSERT / UPDATE / DELETE  (0) 2021.12.03
CASE문  (0) 2021.12.03
연산  (0) 2021.12.03
결과 행 제한(LIMIT OFFSET)  (0) 2021.12.03
테이블에서 데이터 검색 (SELECT, DESC, WHERE, AND, OR , NOT, LIKE)  (0) 2021.12.03

댓글