티스토리 뷰

데이터베이스/MySQL

ORDER BY로 행 정렬

토마's 2017. 10. 11. 20:38

안녕하세요. 오늘은 SELECT 명령어의 ORDER BY 구문의 사용법에 대해서 포스팅하려고 합니다.

우선, SELECT 명령어에는 ORDER BY 구문이 있으며, 이 구문은 검색 결과의 행 순서를 바꿀 수 있는 정렬 방법이며, ORDER BY 구문을 지정하지 않을 경우에는 데이터베이스 내부에 저장된 순서로 결과값이 반환됩니다.


SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명            // 조건식이 있는 경우

SELECT 열명 FROM 테이블명 ORDER BY 열명                         // 조건식이 없는 경우

ORDERY BY 구문은 위와 같은 구조로 사용되며, 예제를 통해서 결과 값을 확인해보도록 하겠습니다. 우선 sample31이라는 테이블에는 각각의 이름, 나이, 주소등의 데이터가 들어가 있으며, 이것을 ORDER BY를 사용해서 나이순으로 정렬하면 아래와 같은 결과를 확인할 수 있습니다.



그리고 DESC와 ASC를 사용해서 내림차순 정렬 및 오름차순 정렬을 할 수 있으며, 아래와 같이 사용하면 됩니다. 기본적으로 데이터베이스의 기본 값으로 오름차순으로 설정되어 있으며, ASC는 생략 가능합니다. 그러나 데이터베이스 제품에 따라서 기본 값이 다를 수도 있고, 사용자에 의해 기본 값이 변경되었을 경우에는 다른점을 유의하며, 명시적으로 표현해주는 것이 좋습니다.


SELECT 열명 FROM 테이블명 ORDER BY 열명 DESC            // 내림차순 정렬

SELECT 열명 FROM 테이블명 ORDER BY 열명 ASC             // 오름차순 정렬


그럼 한 가지 예제를 통해 알아보겠습니다.


결과 값을 확인해보시면, 위의 결과 값과 다르게 내림차순으로 정렬된 데이터들을 확인할 수 있습니다.



※ ORDER BY로 정렬할 때 주의 할 점


정렬할 때 주의할 점은 대소 관계가 중요합니다. 1, 2, 3 과 같은 수치형 데이터라면 대소 관계는 숫자의 크기로 판별하므로 이해하기 쉬우나, 문자열형 데이터의 대소 관계는 사전식 순서에 의해 결정된다는 것을 알고, 수치형 데이터와 문자열형 데이터는 대소 관계의 계산 방법이 다르니 주의해야 됩니다.


그리고, 데이터의 양이 많을 경우, 하나의 열만으로는 행을 특정짓기 어려울 때가 종종 있습니다. 예를 들어 '상품코드와 해당 상품의 하위번호'까지 함께 고려했을 때 비ㅣ로소 하나의 행을 특정지을 수 있는 명세서 등을 들 수 있습니다.


SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명1 [ ASC | DESC ], 열명2 [ ASC | DESC ]

위와 같이 여러개의 열명을 나열하면서 정렬 할 수 있으며, 위의 구문 중에 [ ] 부분은 생략할 수 있으며, | 는 둘 중 하나라는 뜻입니다. 이것 또한 예제를 통해서 결과 값을 확인해보겠습니다.


위의 예제를 보시면, a의 데이터를 우선으로 오름차순 정렬하면서, b의 데이터를 오름차순 정렬되어 있는 결과 값을 확인할 수 있습니다. 즉, a의 데이터를 먼저 1 ~ 2의 순서로 정렬하고 b의 데이터를 1 ~ 3의 순서로 정렬했다고 보시면 됩니다.



마지막으로 수 많은 데이터들 중에서는 NULL값을 가지고 있는 데이터들이 있습니다. 정렬에서 NULL 값의 경우에는 데이터베이스 제품에 따라 취급하는 방식이 다르지만 MySQL의 경우는 NULL 값을 가장 작은 값으로 취급해 ASC(오름차순)에서는 가장 먼저, DESC(내림차순)에서는 가장 나중에 표시합니다.


이상으로 데이터를 정렬할 수 있는 ORDER BY에 대해 알아보았고, 포스팅을 마치도록 하겠습니다 : )