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

MySQL 저장 함수가 테이블의 동적 값을 사용할 때 NULL 값을 반환하는 이유와 처리 방법

MySQL 저장 함수에서 NULL 값이 반환되는 이유

MySQL에서 저장 함수(stored function)는 인자로 받은 값 중 하나라도 NULL이 포함되어 있으면 최종 결과 역시 NULL을 반환합니다. 이는 SQL에서 NULL이 '알 수 없는 값(unknown value)'을 의미하기 때문입니다. NULL이 포함된 산술 연산이나 집계의 결과는 확정할 수 없으므로, MySQL은 이를 NULL로 처리합니다.

예제: NULL 값이 포함된 데이터에 저장 함수 적용하기

아래 예제에서는 학생 성적 테이블(Student_marks)의 'Mohit' 레코드에 English 과목 점수가 NULL로 저장되어 있습니다. 이 데이터에 저장 함수 avg_marks를 적용하면 평균 점수 대신 NULL이 반환됩니다.

mysql> Select * from Student_marks;
+-------+------+---------+---------+---------+
| Name  | Math | English | Science | History |
+-------+------+---------+---------+---------+
| Raman |   95 |      89 |      85 |      81 |
| Rahul |   90 |      87 |      86 |      81 |
| Mohit |   90 |    NULL |      86 |      81 |
+-------+------+---------+---------+---------+
3 rows in set (0.00 sec)

mysql> SELECT Avg_marks('Mohit') AS 'MOHIT_marks';
+-------------+
| MOHIT_marks |
+-------------+
|        NULL |
+-------------+
1 row in set (0.00 sec)

NULL 문제를 피하는 방법

위 실행 결과에서 볼 수 있듯이, 모든 과목 점수가 존재하는 'Raman'이나 'Rahul'과 달리 'Mohit'은 단 하나의 열이라도 NULL이면 함수 전체가 NULL을 반환합니다. 만약 NULL 값을 제외하고 평균을 계산하고 싶다면 다음과 같은 방법을 활용할 수 있습니다.

  • IFNULL() 또는 COALESCE() 사용: 저장 함수 내부에서 NULL을 0 같은 기본값으로 치환하여 계산을 진행합니다.
  • 조건문(WHERE) 필터링: 쿼리 단계에서 NULL이 포함된 행을 미리 걸러낸 후 함수를 적용합니다.
  • 집계 함수 활용: AVG(), SUM() 같은 집계 함수는 기본적으로 NULL을 자동으로 무시하므로, 상황에 따라 저장 함수 대신 이를 사용하는 것도 좋은 대안입니다.

결론적으로, MySQL 저장 함수는 NULL 값에 대한 별도의 처리 로직이 없다면 그대로 NULL을 반환한다는 점을 항상 염두에 두어야 하며, 필요에 따라 명시적인 NULL 처리를 추가하는 것이 안전합니다.