본문 바로가기
CS/DataBase

데이터베이스 첫걸음 정리 - 9장. 정렬(ORDER BY)

by yongckim 2022. 8. 30.
728x90
반응형

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

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

언제나 정해진 순서로 결괏값을 얻기 위해서는 ORDER BY구를 지정해야 합니다.

ORDER BY로 검색 결과 정렬하기

SELECT 명령의 ORDER BY 구로 정렬하고 싶은 열을 지정합니다. 지정된 열의 값에 따라 행 순서가 변경됩니다.

이때 ORDER BY 구는 WHERE 구 뒤에 지정합니다.

SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명

검색 조건이 필요없는 경우에는 WHERE 구를 생략할 수 있으며 ORDER BY 구가 FROM 구 바로 뒤에 오게 됩니다.

SELECT 열명 FROM 테이블명 ORDER BY 열명

다음은 ORDER BY 예시입니다.

SELECT * FROM Customers ORDER BY City;

위와같이 ORDER BY에 열만 지정할 경우 해당 열을 기준으로 오름차순 정렬됩니다.

ORDER BY DESC로 내림차순 정렬하기

앞선 예제에서는 ORDER BY로 오름차순 정렬을 했습니다. 이번에는 이와 반대로 내림차순으로 정렬해보겠습니다.

내림차순은 열명 뒤에 DESC를 붙여 지정합니다.

SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 DESC

다음은 ORDER BY 내림차순 정렬 예시입니다.

SELECT * FROM Customers ORDER BY City DESC;

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

DESC는 descendant(하강), ASC는 ascendant(상승)의 약자입니다.

ORDER BY는 기본적으로 오름차순으로 정렬되며 내림차순으로 정렬시, DESC 키워드를 사용하는 것을 기억합시다.

대소관계

ORDER BY로 정렬할 때는 값의 대소관계가 중요합니다.

데이터별 판별기준은 다음과 같습니다.

  • 수치형 데이터 : 숫자의 대소관계( 1 < 2 < 10 < 100)
  • 날짜시간형 데이터 : 숫자의 대소관계 (1999년 < 2013년 < 2014년)
  • 문자열 데이터 : 사전식 순서 (가 < 나 < 다)

사전식 순서에서 주의할 점

수치형과 문자열형은 대소관계에서 계산 방법이 서로 다릅니다.

수치형은 대소관계로 문자열 형은 사전식 순서로 비교하는데 다음과 같은 상황에서 문제가 발생할 수 있습니다.

만약 문자열형으로 숫자를 저장하는 경우 1, 2, 10 과 같은 형태로 저장했다고 가정해봅시다.

이를 ORDER BY로 정렬해서 출력해보면 1, 2, 10이 아닌 1, 10, 2로 정렬이 되는데 그 이유는 문자열은 사전식으로 정렬되는데 2보다 10이 사전순으로 더 앞서 있기 때문입니다.

이런식으로 숫자를 문자열형으로 저장할때 정렬에 주의해서 사용해야 합니다.

ORDER BY는 테이블에 영향을 주지 않는다.

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

SELECT 명령은 데이터를 검색할 뿐, 테이블의 변경을 하지 않는 다는 점을 기억해둡시다.

반응형