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

MySQL에서 NULL이 아닌 값을 먼저 표시하고 NULL 값은 나중에 정렬하는 방법

데이터를 조회할 때 값이 존재하는 행(NULL이 아닌 행)을 우선적으로 표시하고, NULL인 행은 마지막에 정렬해야 하는 경우가 종종 있습니다. MySQL에서는 ORDER BY 절과 IS NULL 연산자를 조합하면 이를 아주 간단하게 구현할 수 있습니다. 예제와 함께 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1357
    -> (
    -> StudentName varchar(40),
    -> StudentCountryName varchar(30)
    -> );
Query OK, 0 rows affected (0.49 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용하여 테이블에 레코드를 추가합니다. 일부 행에는 의도적으로 NULL 값을 넣습니다.

mysql> insert into DemoTable1357 values('Chris','US');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1357 values('David',NULL);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1357 values('David','AUS');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1357 values('Carol',NULL);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1357 values('Mike','UK');
Query OK, 1 row affected (0.15 sec)

3. 전체 데이터 조회하기

SELECT 문을 사용하여 테이블의 모든 레코드를 확인합니다.

mysql> select * from DemoTable1357;

다음과 같은 결과가 출력됩니다.

+-------------+--------------------+
| StudentName | StudentCountryName |
+-------------+--------------------+
| Chris       | US                 |
| David       | NULL               |
| David       | AUS                |
| Carol       | NULL               |
| Mike        | UK                 |
+-------------+--------------------+
5 rows in set (0.00 sec)

4. NULL이 아닌 값을 먼저 표시하는 쿼리

다음은 NULL이 아닌 값을 먼저 표시하고, NULL 값은 나중에 표시하도록 정렬하는 쿼리입니다.

mysql> select * from DemoTable1357
    -> order by (StudentCountryName IS NULL),StudentName;

다음과 같은 결과가 출력됩니다.

+-------------+--------------------+
| StudentName | StudentCountryName |
+-------------+--------------------+
| Chris       | US                 |
| David       | AUS                |
| Mike        | UK                 |
| Carol       | NULL               |
| David       | NULL               |
+-------------+--------------------+
5 rows in set (0.00 sec)

쿼리 동작 원리

핵심은 ORDER BY (StudentCountryName IS NULL) 부분입니다. IS NULL 연산자는 해당 열의 값이 NULL이면 1, NULL이 아니면 0을 반환합니다. MySQL은 기본적으로 오름차순(ASC)으로 정렬하기 때문에 0, 즉 값이 있는 행이 먼저 출력되고, 1인 NULL 행은 가장 뒤로 밀려나게 됩니다.

두 번째 정렬 기준인 StudentName은 같은 그룹 내에서 학생 이름 순으로 정렬해 주므로, 결과가 더욱 깔끔하게 정돈됩니다. 만약 NULL 행을 먼저 표시하고 싶다면 DESC 키워드를 추가하여 내림차순으로 정렬하면 됩니다.