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

MySQL에서 ORDER BY ASC 정렬 시 NULL 값을 맨 아래로 표시하는 방법

MySQL에서 ORDER BY ASC(오름차순)로 데이터를 정렬하면 기본적으로 NULL 값이 목록의 가장 앞쪽에 표시됩니다. 하지만 실무에서는 NULL 값을 목록 맨 아래로 보내야 하는 경우가 많습니다. 이럴 때 CASE 문ORDER BY를 함께 사용하면 원하는 정렬 결과를 손쉽게 얻을 수 있습니다.

1. 예제 테이블 생성

먼저 테스트용 테이블을 생성합니다.

mysql> create table DemoTable1937
    (
    Name varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

2. 샘플 데이터 삽입

insert 명령어를 사용해 레코드를 삽입합니다. 일반 문자열 외에 NULL 값과 빈 문자열('')도 함께 넣어 다양한 경우를 확인해 보겠습니다.

mysql> insert into DemoTable1937 values('Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1937 values(NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1937 values('Adam');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1937 values('John');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1937 values('');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1937 values(NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1937 values('Bob');
Query OK, 1 row affected (0.00 sec)

3. 전체 레코드 조회

select 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select * from DemoTable1937;

실행 결과는 다음과 같습니다.

+-------+
| Name  |
+-------+
| Chris |
| NULL  |
| Adam  |
| John  |
|       |
| NULL  |
| Bob   |
+-------+
7 rows in set (0.00 sec)

4. NULL 값을 맨 아래로 정렬하는 쿼리

다음은 오름차순(ASC) 정렬을 유지하면서 NULL 값을 맨 아래에 배치하는 쿼리입니다.

mysql> select * from DemoTable1937
    order by case when Name IS NULL then 100
    when Name='' then 101
    else 103
    end desc
    ,
    Name asc;

실행 결과는 다음과 같습니다.

+-------+
| Name  |
+-------+
| Adam  |
| Bob   |
| Chris |
| John  |
|       |
| NULL  |
| NULL  |
+-------+
7 rows in set (0.00 sec)

5. 쿼리 동작 원리

CASE 문은 각 행에 우선순위 숫자를 부여하는 역할을 합니다.

  • Name이 NULL이면 100
  • Name이 빈 문자열('')이면 101
  • 그 외의 일반 값이면 103

이 우선순위 값을 내림차순(DESC)으로 정렬하면 103 → 101 → 100 순서가 되어, 일반 값이 먼저 출력되고 빈 문자열과 NULL은 뒤로 밀려납니다. 이후 두 번째 정렬 조건인 Name asc가 각 그룹 내에서 이름을 알파벳 순으로 정렬해 줍니다.

그 결과 Adam, Bob, Chris, John처럼 일반 값이 오름차순으로 정렬되고, 그 아래 빈 문자열, 마지막에 NULL 값들이 배치됩니다. 이 패턴은 게시판 목록이나 드롭다운 옵션처럼 비어 있는 데이터를 항상 마지막에 보여줘야 하는 화면에서 특히 유용하게 활용할 수 있습니다.