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

MySQL COALESCE 함수로 두 개의 필드와 NULL 값 정렬하는 방법

MySQL에서 두 개의 필드를 기준으로 정렬할 때 NULL 값이 포함되어 있으면 단순한 ORDER BY 절만으로는 원하는 결과를 얻기 어렵습니다. 이럴 때 COALESCE() 함수를 활용하면 첫 번째 필드가 NULL일 경우 두 번째 필드의 값을 대신 사용하여 자연스러운 순서대로 정렬할 수 있습니다.

1. 샘플 테이블 생성

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

mysql> create table DemoTable
-> (
-> FirstName varchar(100),
-> LastName varchar(100)
-> );
Query OK, 0 rows affected (1.39 sec)

2. 레코드 삽입

INSERT 명령어를 사용하여 의도적으로 NULL 값을 포함한 레코드들을 삽입합니다.

mysql> insert into DemoTable values('Sam','Brown');
Query OK, 1 row affected (0.25 sec)

mysql> insert into DemoTable values(null,'Smith');
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable values('David','Taylor');
Query OK, 1 row affected (0.22 sec)

mysql> insert into DemoTable values('Mike',null);
Query OK, 1 row affected (0.45 sec)

3. 전체 레코드 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

출력 결과

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Sam       | Brown    |
| NULL      | Smith    |
| David     | Taylor   |
| Mike      | NULL     |
+-----------+----------+
4 rows in set (0.06 sec)

4. COALESCE를 이용한 정렬 쿼리

두 개의 필드와 NULL 값을 모두 고려하여 이름순으로 정렬하려면 아래와 같이 COALESCE() 함수를 ORDER BY 절에 사용합니다.

mysql> select *from DemoTable order by coalesce(FirstName,LastName);

출력 결과

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| David     | Taylor   |
| Mike      | NULL     |
| Sam       | Brown    |
| NULL      | Smith    |
+-----------+----------+
4 rows in set (0.04 sec)

동작 원리

COALESCE(FirstName, LastName)는 FirstName 값이 NULL이 아니면 FirstName을 그대로 반환하고, NULL인 경우에는 LastName 값을 대신 반환합니다. 위 예제의 각 행에 적용해 보면 다음과 같습니다.

  • David / Taylor → 'David' 기준으로 정렬
  • Mike / NULL → 'Mike' 기준으로 정렬
  • Sam / Brown → 'Sam' 기준으로 정렬
  • NULL / Smith → FirstName이 NULL이므로 'Smith' 기준으로 정렬

그 결과 David → Mike → Sam → Smith 순으로 정렬이 깔끔하게 적용됩니다. 이처럼 COALESCE()는 NULL 값이 섞여 있는 여러 컬럼을 하나의 정렬 기준으로 통합해서 처리해야 할 때 매우 유용한 함수입니다.