본문 바로가기
programming/DataManage

mysql ORDER BY 정렬 숫자와 문자의 차이 문자는 순서, 숫자는 크기

by 개코 - 개발과 코딩 2023. 3. 7.

SELECT 구문시 정렬을 할 때 ORDER BY 를 사용한다. 숫자는 크기 비교를 하여 데이터를 정렬한다. 문자는 문자에 부여된 순서를 이용하여 데이터를 정렬한다. 가시적으로는 숫자지만, 컴퓨터가 인식하는 데이터가 숫자인지 문자인지에 따라 정렬이 다를 수 있다. 문자 데이터 11을 오름차순하면 2 보다 앞에 위치하고, 숫자데이터 11을 오름차순 하면 2 뒤에 위치한다.

mysql ORDER BY 정렬 숫자와 문자의 차이
문자는 순서, 숫자는 크기

mysql 에서 SELECT 명령어는 테이블에 저장된 데이터를 조회하는 기능을 한다.

SELECT 구문에 ORDER BY 키워드를 추가하여 컬럼을 지정하면 정렬을 할 수 있는데 오름차순과 내림차순으로 조회할 수 있다.

그런데 조회를 할 때 숫자형 데이터가 제대로 정렬되지 않는 경우들이 있다.

정확하게는 눈으로 보는 것은 숫자이지만 컴퓨터가 인식하는 것은 문자형 또는 숫자형 일 수 있다.

SELECT 조회시 ORDER BY 를 사용하여 문자열을 정렬할 때 숫자 부분은 차이가 있다.

SELECT 정렬 오름차순과 내림차순

mysql 에서 데이터를 조회할 떄 SELECT 구문을 사용하고 정렬을 하기 위해서 ORDER BY 구문을 추가한다.

정렬은 오름차순과 내림차순이 있는데 각각 ORDER BY 구문에서 ASC, DESC 로 사용한다.

오름차순과 내림차순은 사람이 데이터를 쉽게 찾기 위해 데이터의 순서를 정하는 것이다.

아래는 SELECT 구문에서 사용하는 정렬 방법이다.

/** 오름차순 */
SELECT * FROM 테이블명
 ORDER BY 컬럼명 ASC
 
/** 내림차순 */
SELECT * FROM 테이블명
 ORDER BY 컬럼명 DESC

원본데이터를 준비하자.

테스트를 위한 원본데이터를 준비해 본다.

이전에 고전적인 카테고리 SELECT 구문을 위해 작성한 것으로 문자열 정렬을 이용하여 카테고리를 표현한다.

물론, 부모키와 자식키가 존재하지만 모든 데이터를 조회해야 할 필요성이 있었으며 중요한 것은 mysql 8.0 이전버전이라 WITH 구문을 사용할 수 없었기 때문이다.

하지만, 이런 방법도 만들어 놓으면 요긴하게 사용할 수 있다.

어쨌든, 문자와 숫자가 SELECT 정렬할 경우 어떻게 표현되는지 확인하기 위한 원본데이터는 아래를 참고한다.

MySQL 카테고리 테이블과 SELECT 조회 INSERT 입력 쿼리 만들기

mysql 에서 카테고리 테이블의 형식은 자식키와 부모키의 조합으로 만들 수 있다. 이 형식은 지금도 많이 사용되지만 SELECT 시 난해한 점이 여럿 발생한다. WITH 을 사용하면 편하지만 사용하지 못

lngnat.tistory.com

위의 카테고리 테이블에 입력된 데이터는 다음과 같다.

애마한 구조로 보이지만, 문자 정렬을 이용하면 이것저것 할 수 있다.

참고로 아래에서 조회되는 모든 컬럼은 문자형 varchar 이다.

SELECT idx, idxParent, cateOrder, cateTitle
  FROM tb_category
;

문자 숫자 정렬의 차이

데이터는 준비됐고 조회도 해 보았다. 이번엔 ORDER BY 를 사용하여 문자와 숫자로 각각 조회를 해 보도록 한다.

아래는 문자와 숫자의 오름차순을 보여준다.

/** idx 컬럼 오름차순 */
SELECT idx, idxParent, cateOrder, cateTitle
  FROM tb_category
 ORDER BY idx ASC
;

/** idx 컬럼 숫자로 CAST 후 오름차순 */
SELECT idx, idxParent, cateOrder, cateTitle
  FROM tb_category
 ORDER BY CAST(idx AS UNSIGNED) ASC
;

위의 SELECT 쿼리를 보면 ORDER BY 정렬부분에서 문자데이터인 idx 를 CAST 하여 숫자로 변경해 주고 있다.

그리고 결과는 아래와 같다.

idx 컬럼을 유심히 살펴본다.

문자데이터가 정렬 될때는 문자의 시작점을 기준으로 문자열을 오름차순 하는 것이기 때문에 1부터 순차정렬되는 것을 볼 수 있다.

숫자데이터가 정렬 될때는 숫자의 크기를 기준으로 오름차순 하기 때문에 1부터 크기대로 순차정렬되는 것을 볼 수 있다.

정렬 : 좌) 문자 idx 오름차순, 우) 숫자 idx 오름차순

이것은 엑셀의 정렬과 같다.

엑셀 또한 문자열 정렬과 숫자 정렬은 엄연히 차이가 발생한다.

가시적으로 같은 숫자지만 컴퓨터가 인식하는 데이터형태가 다르기 때문.

문자 정렬과 숫자 정렬의 차이를 정리해 본다.

  • 문자 정렬
    컴퓨터가 인식하는 문자의 순서를 기준으로 오름차순, 내림차순 한다.
    예 ) ㄱ, ㄴ, ㄷ, ㄹ
  • 숫자 정렬
    데이터의 크기를 비교하여 오름차순, 내림차순으로 정렬한다.
    예 ) 1, 2, 3, 4
반응형

댓글