Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL ENUM 값은 어떻게 정렬될까? 정렬 원리와 예제 총정리

MySQL에서 각 ENUM 값은 고유한 인덱스 번호와 연결되어 있으며, ENUM 값의 정렬 기준도 바로 이 인덱스 번호입니다. 인덱스 번호는 컬럼을 정의할 때 열거 멤버를 나열한 순서에 따라 결정됩니다.

예를 들어 ENUM('GOOD', 'EXCELLENT')로 정의된 컬럼에서는 'GOOD'이 'EXCELLENT'보다 먼저 정렬됩니다. 다시 말해 'GOOD'의 인덱스 번호는 1이고, 'EXCELLENT'의 인덱스 번호는 2입니다.

NULL과 빈 문자열의 정렬 순서

MySQL은 ENUM 컬럼에 빈 문자열('')과 NULL 값도 저장할 수 있습니다. 이 경우 정렬 시 빈 문자열은 일반 문자열보다 앞에 위치하고, NULL은 빈 문자열보다 더 앞에 위치합니다. 따라서 ENUM 값의 전체적인 정렬 순서는 다음과 같습니다.

ENUM 값의 정렬 순서
1. NULL
2. 빈 문자열 ('')
3. 비어 있지 않은 문자열 (인덱스 번호순)

예제로 확인하는 ENUM 정렬

다음 예제는 ENUM 타입의 'grade' 컬럼을 가진 'result' 테이블입니다. 테이블에는 아래와 같은 데이터가 저장되어 있습니다.

mysql> Select * from Result;
+-----+--------+-------+
| Id  | Name   | Grade |
+-----+--------+-------+
| 100 | Gaurav | GOOD  |
| 101 | Rahul  | POOR  |
| 102 | Rahul  | NULL  |
| 103 | Mohan  |       |
+-----+--------+-------+
4 rows in set (0.00 sec)

이제 ORDER BY 절을 사용해 grade 컬럼을 기준으로 정렬해 보겠습니다. MySQL은 인덱스 번호를 기준으로 정렬된 결과를 반환합니다.

mysql> Select * from result order by grade;
+-----+--------+-------+
| Id  | Name   | Grade |
+-----+--------+-------+
| 102 | Rahul  | NULL  |
| 103 | Mohan  |       |
| 101 | Rahul  | POOR  |
| 100 | Gaurav | GOOD  |
+-----+--------+-------+
4 rows in set (0.00 sec)

출력 결과를 보면 NULL 값이 가장 먼저, 그다음 빈 문자열, 마지막으로 일반 문자열이 인덱스 번호 순으로 정렬된 것을 확인할 수 있습니다. 만약 ENUM 값을 알파벳 순서가 아닌 선언 순서가 아닌 다른 방식으로 정렬하고 싶다면, ORDER BY CAST(grade AS CHAR)처럼 명시적으로 문자열로 변환하여 정렬하는 방법도 활용할 수 있습니다.