'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,
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);
If you found this post helpful, please consider sharing to your network. I'm also available to help you be
successful with your distributed systems! Please reach out
if you're interested in working with me, and I'll be happy to schedule a free one-hour consultation.