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

MySQL에서 열 값 중 하나가 NULL일 때 두 열을 안전하게 연결하는 방법

MySQL에서 NULL 값이 있는 열을 안전하게 연결하기

MySQL에서 CONCAT() 함수로 두 개의 열을 연결할 때, 하나의 열 값이라도 NULL이면 결과 전체가 NULL로 반환되는 문제가 발생합니다. 쿼리 실행 시 이러한 문제를 피하려면 IFNULL() 함수를 함께 사용하는 것이 좋습니다.

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1793
     (
     StudentFirstName varchar(20),
     StudentLastName varchar(20)
     );
Query OK, 0 rows affected (0.00 sec)

insert 명령을 사용하여 테이블에 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable1793 values('John','Smith');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1793 values('Carol',NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1793 values(NULL,'Brown');
Query OK, 1 row affected (0.00 sec)

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

mysql> select * from DemoTable1793;

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

+------------------+-----------------+
| StudentFirstName | StudentLastName |
+------------------+-----------------+
| John             |           Smith |
| Carol            |            NULL |
| NULL             |           Brown |
+------------------+-----------------+
3 rows in set (0.00 sec)

위 데이터에서 볼 수 있듯이 'Carol'의 성(LastName)과 'Brown'의 이름(FirstName)은 NULL입니다. 만약 단순히 CONCAT(StudentFirstName, StudentLastName)을 실행하면 해당 행의 결과 역시 모두 NULL로 출력됩니다.

NULL을 처리하며 두 열을 연결하는 쿼리

다음은 열 값 중 하나가 NULL인 경우에도 정상적으로 두 열을 연결하는 쿼리입니다.

mysql> select concat(ifnull(StudentFirstName,''),ifnull(StudentLastName,'')) from DemoTable1793;

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

+----------------------------------------------------------------+
| concat(ifnull(StudentFirstName,''),ifnull(StudentLastName,'')) |
+----------------------------------------------------------------+
| JohnSmith                                                      |
| Carol                                                          |
| Brown                                                          |
+----------------------------------------------------------------+
3 rows in set (0.00 sec)

IFNULL() 함수는 첫 번째 인수가 NULL이면 두 번째 인수로 지정한 값(여기서는 빈 문자열 '')을 대신 반환합니다. 따라서 NULL 값이 빈 문자열로 치환되어 CONCAT() 함수가 정상적으로 작동하며, 'JohnSmith', 'Carol', 'Brown'처럼 의도한 결과를 얻을 수 있습니다.

참고: COALESCE() 함수 활용

IFNULL() 외에도 COALESCE() 함수를 사용하면 동일한 결과를 얻을 수 있습니다. COALESCE()는 인수 목록에서 NULL이 아닌 첫 번째 값을 반환하며, 여러 개의 후보 값을 처리해야 할 때 특히 유용합니다.

mysql> select concat(coalesce(StudentFirstName,''),coalesce(StudentLastName,'')) from DemoTable1793;

두 함수 모두 NULL 값을 기본값으로 대체하는 역할을 하므로, 상황에 맞게 선택하여 사용하면 됩니다.