MySQL

SQL 정렬 ORDER BY

RyanGomdoriPooh 2017. 6. 5. 13:27

우리는 DB에서 원하는 정보를 가져와서 사용합니다.


원하는 정보를 가져와서 활용하는데에는


모바일용 SQL Lite에 저장하는 과정이나,


바로 DB에서 전달된 Response를 보고 정보를 Client에서 보여주기 위한 과정에서 사용합니다.


그런데 그 과정에서 사용하다보면 어떤 기준에 맞게 레코드(행)을 정렬하는 과정이 정말 중요합니다.


저도 서비스를 개발하면서 사용하다보니 느낀거지만 정말 중요합니다.


예를 들면, 시간 정렬, 사용자 검색 문자 기준 정렬 등 많은 기준으로 Response를 만드는데 사용했습니다.


그러면 정렬 쿼리에 대한 이야기를 시작하겠습니다.



정렬 쿼리 ORDER BY


SELECT [열,...] FROM [테이블명] WHERE [조건식] ORDER BY [정렬할열 정렬방식,...];


ex) SELECT user_id, update_time FROM video_info ORDER BY user_id ASC, update_time DESC;


위의 예처럼 사용할 수 있습니다.


설명하자면, video_info 테이블에서 user_id와 update_time이라는 열을 출력합니다.


그런데 user_id는 오름차순으로, update_time은 내림차순으로 표현하고 싶을때 사용하는 방식입니다.


제가 여기서 복수 정렬부터 설명했는데, 복수 정렬을 설명하고 나면, 단수 정렬은 당연히 따라온다고 생각했습니다.


출력 결과를 보면,


user_id             update_time


위와 같이 ORDER BY user_id ASC, update_time DESC; 에서 


앞에 사용된 user_id를 기준으로 그룹핑 오름차순 정렬이 되고,


그 기준 user_id 안에서 다시 update_time을 기준으로 내림차순 정렬이 되는 모습을 볼 수 있습니다.


즉, 앞에 사용한 정렬을 하고 그 다음에 그 기준에 따라서 그룹핑을 한 상황에서, 뒤에 사용한 정렬을 이용해 내부 정렬을 하는 과정을 거칩니다.


ASC : 오름차순 정렬로써, 위에서 아래로 증가됩니다. 

ex) 


DESC : 내림차순 정렬로써, 위에서 아래로 감소됩니다.

ex)



정렬 데이터의 대소관계


정렬할 데이터의 대소관계 정렬에 대한 기준은 일반적으로 수치형 데이터와 문자열형 데이터가 다른 방식을 가집니다.


1) 수치형 데이터의 대소관계

그냥 우리가 아는 그대로 숫자 순서대로 정렬이됩니다.

오름차순의 경우, 1 2 3 4 5 6 7 8 9 10

내림차순의 경우, 10 9 8 7 6 5 4 3 2 1


2) 문자형 데이터의 대소관계

문자형은 맨 왼쪽에 있는 글자부터 비교를 합니다.


2-1) 한글

글자가 만들어지는 순서대로 비교를 합니다.

예를 들면, '공' 과 '곰' 있습니다. 오름차순 정렬을 하겠습니다.

일단은 공의 ㄱ, 곰의 ㄱ이 같습니다. 그러면 같으므로 다음 글자가 있는지 확인합니다. 없으면 같이 그룹핑 정렬됩니다.

다음 글자인 공의 ㅗ, 곰의 ㅗ 를 비교합니다. 같으므로 다음 글자가 있는지 확인합니다. 없으면 같이 그룹핑 정렬됩니다.

다음 글자인 공의 ㅇ, 곰의 ㅁ 를 비교합니다. ㅁ이 ㅇ 보다 먼저나오는 글자이므로,

최종적으로,

순으로 정렬됩니다.


2-2) 문자형 숫자

눈으로 보기에는 수치형 숫자 1과 문자형 숫자 '1'은 같아보일 수 있습니다.

그런데 정렬은 다른 방식으로 합니다.

문자형은 맨 왼쪽에 있는 글자부터 비교를 합니다.

예를 들어, 1, 12, 10, 4 가 있습니다.

맨 왼쪽부터 비교를 합니다.

1

12

10

4

으로 일단 정렬됩니다.

두번째 글자가 있는지 확인합니다.

12와 10의 경우에는 두번째 숫자가 있습니다.

10

12

순으로 정렬해줍니다.

최종적으로,

1

10

12

4

순으로 정렬됩니다.


3) NULL 데이터의 대소관계

NULL 값을 가지는 레코드(행)은 정렬의 가장 먼저 또는 가장 나중에 나타나게 됩니다.

ASC 정렬 시는 가장 작은 값이기에 제일 먼저 나타납니다.

DESC 정렬 시에는 가장 작은 값이기에 제일 나중에 나타납니다.



마지막으로 ORDER BY는 SELECT와 검색용으로 사용하는 키워드이므로, 절대 테이블의 정보에는 영향이 없습니다.



이상으로 SQL 정렬 ORDER BY 에 대한 설명을 마치겠습니다.