MySQL에서 필드가 NULL일 경우 다른 필드 선택하기
특정 필드의 값이 NULL일 때 같은 행에 있는 다른 필드의 값을 대신 가져오고 싶다면, MySQL에서 제공하는 COALESCE() 함수를 사용하면 됩니다. COALESCE()는 인자로 전달된 값들 중 처음으로 NULL이 아닌 값을 반환하는 함수입니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1470
-> (
-> FirstName varchar(20),
-> Age int
-> );
Query OK, 0 rows affected (0.57 sec)2. 데이터 삽입하기
insert 명령을 사용해 테이블에 레코드를 삽입합니다. 이때 의도적으로 NULL 값을 포함시켜 동작을 확인합니다.
mysql> insert into DemoTable1470 values('Robert',23);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1470 values('Bob',NULL);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1470 values(NULL,25);
Query OK, 1 row affected (0.15 sec)3. 전체 레코드 확인하기
select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1470;
실행 결과는 다음과 같습니다.
+-----------+------+ | FirstName | Age | +-----------+------+ | Robert | 23 | | Bob | NULL | | NULL | 25 | +-----------+------+ 3 rows in set (0.00 sec)
4. COALESCE()로 NULL 대체 값 선택하기
FirstName 필드를 선택하되, 값이 NULL이면 Age 필드의 값을 대신 반환하는 쿼리는 다음과 같습니다.
mysql> select coalesce(FirstName,Age) as FirstNameOrAgeValue from DemoTable1470;
실행 결과는 다음과 같습니다.
+---------------------+ | FirstNameOrAgeValue | +---------------------+ | Robert | | Bob | | 25 | +---------------------+ 3 rows in set (0.00 sec)
COALESCE() 함수의 동작 원리
위 결과에서 세 번째 행은 FirstName이 NULL이었기 때문에 Age 값인 25가 반환된 것을 확인할 수 있습니다. 즉, COALESCE(FirstName, Age)는 왼쪽부터 차례대로 인자를 평가하여 NULL이 아닌 첫 번째 값을 반환합니다.
또한 COALESCE()는 두 개 이상의 인자도 처리할 수 있으므로, 여러 후보 필드 중 우선순위에 따라 NULL이 아닌 첫 번째 값을 가져와야 하는 상황에서 매우 유용하게 활용할 수 있습니다.