'MySQL: Number + NULL

Maybe not breaking news, but I think it’s interesting enough of a point, and I didn’t really find anything about the topic when I googled it. If you do any addition, subtraction, multiplication, or division (and probably a lot more mathematical functions for that matter) and NULL is one of your values, the entire expression will evaluate to NULL.
For example, this statement returns NULL:
mysql> select 4 + NULL;
+----------+
| 4 + NULL |
+----------+
| NULL |
+----------+
Normally you wouldn’t do the above in such a simple way, for instance, you might do some addition in a subquery. For example,
Maybe not breaking news, but I think it’s interesting enough of a point, and I didn’t really find anything about the topic when I googled it. If you do any addition, subtraction, multiplication, or division (and probably a lot more mathematical functions for that matter) and NULL is one of your values, the entire expression will evaluate to NULL.
For example, this statement returns NULL:
mysql> select 4 + NULL;
+----------+
| 4 + NULL |
+----------+
| NULL |
+----------+
Normally you wouldn’t do the above in such a simple way, for instance, you might do some addition in a subquery. For example,
mysql> select 4 + (select val from table1 WHERE id < 3 LIMIT 1);
+---------------------------------------------------+
| 4 + (select val from table1 WHERE id < 3 LIMIT 1) |
+---------------------------------------------------+
| NULL |
+---------------------------------------------------+
This statement will return NULL
Fortunately, MySQL includes the handy IFNULL operator. IFNULL lets you specify a value if the expression evaluates to NULL. Example:
mysql> select 4 + IFNULL(NULL,0);
+--------------------+
| 4 + IFNULL(NULL,0) |
+--------------------+
| 4 |
+--------------------+
As a result, you can now do addition in subqueries without getting weird NULL results. Modifying our practical example, we can now use:
mysql> select 4 + IFNULL((select val from table1 WHERE id < 3 LIMIT 1),0);
+-------------------------------------------------------------+
| 4 + IFNULL((select val from table1 WHERE id < 3 LIMIT 1),0) |
+-------------------------------------------------------------+
| 4 |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
without fear that we wil get a NULL answer.
As a subnote, if you wanted to try this on your own, I just created an empty table:
mysql> create table table1(id int, val int);
Related Posts
MySQL Triggers Tutorial
PHP 5.1.4 Install on Intel Mac (Bug?)
Need Expert Help with Apache Cassandra?
Get professional consulting for your distributed systems challenges. Performance optimization, architecture design, and troubleshooting.