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

MySQL에서 ORDER BY 절과 함께 IFNULL 함수 사용하기

MySQL에서는 IFNULL 함수를 ORDER BY 절과 함께 사용할 수 있습니다. IFNULL은 첫 번째 인자가 NULL일 경우 두 번째 인자로 지정한 값(또는 다른 컬럼)을 대신 반환하기 때문에, NULL 값이 포함된 컬럼을 기준으로 정렬해야 할 때 매우 유용합니다.

기본 문법

IFNULL과 ORDER BY를 조합하는 기본 구문은 다음과 같습니다.

SELECT * FROM yourTableName ORDER BY IFNULL(yourColumnName1, yourColumnName2);

이 구문은 첫 번째 컬럼의 값이 NULL이면 두 번째 컬럼의 값을 기준으로 정렬합니다.

예제로 이해하기

1. 테이블 생성

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

mysql> create table IfNullDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> ProductName varchar(10),
-> ProductWholePrice float,
-> ProductRetailPrice float,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (1.19 sec)

2. 데이터 삽입

INSERT 명령어를 사용해 일부러 NULL 값이 포함된 레코드들을 추가합니다.

mysql> insert into IfNullDemo(ProductName,ProductWholePrice,ProductRetailPrice) values('Product-1',99.50,150.50);
Query OK, 1 row affected (0.21 sec)
mysql> insert into IfNullDemo(ProductName,ProductWholePrice,ProductRetailPrice) values('Product-2',NULL,76.56);
Query OK, 1 row affected (0.18 sec)
mysql> insert into IfNullDemo(ProductName,ProductWholePrice,ProductRetailPrice) values('Product-3',105.40,NULL);
Query OK, 1 row affected (0.20 sec)
mysql> insert into IfNullDemo(ProductName,ProductWholePrice,ProductRetailPrice) values('Product-4',NULL,NULL);
Query OK, 1 row affected (0.18 sec)
mysql> insert into IfNullDemo(ProductName,ProductWholePrice,ProductRetailPrice) values('Product-5',209.90,400.50);
Query OK, 1 row affected (0.14 sec)

3. 전체 데이터 조회

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

mysql> select *from IfNullDemo;

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

+----+-------------+-------------------+--------------------+
| Id | ProductName | ProductWholePrice | ProductRetailPrice |
+----+-------------+-------------------+--------------------+
| 1 | Product-1 | 99.5 | 150.5 |
| 2 | Product-2 | NULL | 76.56 |
| 3 | Product-3 | 105.4 | NULL |
| 4 | Product-4 | NULL | NULL |
| 5 | Product-5 | 209.9 | 400.5 |
+----+-------------+-------------------+--------------------+
5 rows in set (0.02 sec)

IFNULL과 ORDER BY 적용하기

이제 도매가(ProductWholePrice)가 NULL인 경우 소매가(ProductRetailPrice)를 기준으로 정렬되도록 IFNULL을 적용해 보겠습니다.

mysql> select *from IfNullDemo order by ifnull(ProductWholePrice,ProductRetailPrice);

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

+----+-------------+-------------------+--------------------+
| Id | ProductName | ProductWholePrice | ProductRetailPrice |
+----+-------------+-------------------+--------------------+
| 4 | Product-4 | NULL | NULL |
| 2 | Product-2 | NULL | 76.56 |
| 1 | Product-1 | 99.5 | 150.5 |
| 3 | Product-3 | 105.4 | NULL |
| 5 | Product-5 | 209.9 | 400.5 |
+----+-------------+-------------------+--------------------+
5 rows in set (0.00 sec)

결과 분석

출력 결과를 보면 정렬 로직을 쉽게 이해할 수 있습니다.

  • Product-4: 도매가와 소매가가 모두 NULL이므로 가장 앞에 위치합니다.
  • Product-2: 도매가가 NULL이지만 소매가(76.56)가 있으므로 그 값을 기준으로 정렬됩니다.
  • Product-1, Product-3, Product-5: 도매가가 존재하므로 각각의 도매가 값(99.5, 105.4, 209.9)을 기준으로 오름차순 정렬됩니다.

이처럼 IFNULL을 ORDER BY와 함께 사용하면 NULL 값으로 인한 정렬 불안정성을 해결하고, 대체 컬럼의 값을 활용해 일관된 정렬 결과를 얻을 수 있습니다.