Summary : in this tutorial, you will learn about the MySQL NULLIF function and how to use it to prevent the division by zero error in a query.
Introduction to MySQL NULLIF function
The
NULLIF
function is one of the control flow functions that accepts 2 arguments. The
NULLIF
function returns
NULL
if the first argument is equal to the second argument, otherwise it returns the first argument.
The syntax of the
NULLIF
function is as follows:
NULLIF(expression_1,expression_2);
Code language: SQL (Structured Query Language) (sql)
The
NULLIF
function returns
NULL
if
expression_1 = expression_2
is
true
, otherwise it returns
expression_1
Notice that the
NULLIF
function is similar to the following expression that uses the
CASE expression
:
CASE WHEN expression_1 = expression_2
THEN NULL
expression_1
END;
Code language: SQL (Structured Query Language) (sql)
Note that you should not confuse the
NULLIF
function a similar function called
IFNULL function
.
MySQL NULLIF examples
Let’s take a look at some examples of using the
NULLIF
function to understand how it works.
SELECT NULLIF(1,1); -- return NULL
Code language: SQL (Structured Query Language) (sql)
SELECT NULLIF(1,2); -- return 1
Code language: SQL (Structured Query Language) (sql)
SELECT NULLIF('MySQL NULLIF','MySQL NULLIF'); -- return NULL
Code language: SQL (Structured Query Language) (sql)
SELECT NULLIF('MySQL NULLIF','MySQL IFNULL'); -- return MySQL NULLIF
Code language: SQL (Structured Query Language) (sql)
SELECT NULLIF(1,NULL); -- return 1 because 1 <=> NULL
Code language: SQL (Structured Query Language) (sql)
SELECT NULLIF(NULL,1); -- return NULL the first argument
Code language: SQL (Structured Query Language) (sql)
How the statements work.
-
NULIF(1,1)
returnsNULL
because 1 is equal 1. -
NULLIF(1,2)
returns 1, which is the first argument, because 1 is not equal 2. -
NULLIF('MySQL NULLIF','MySQL NULLIF')
returnsNULL
because two arguments are the same string -
NULLIF('MySQL NULLIF','MySQL NULLIF')
returnsMySQL NULLIF
because two strings are not equal. -
NULLIF(1,NULL)
returns 1 because 1 is not equal toNULL
-
NULLIF(NULL,1)
return the first argument i.e.,NULL
, becauseNULL
is not equal to 1.
Using NULLIF function to prevent division by zero error
We often use the
NULLIF
function to prevent the division by zero error in a query. If the MySQL server has
ERROR_FOR_DIVISION_BY_ZERO
mode enabled, it will issue an error when a division by zero occurred.
See the following statement:
SELECT 1/0; -- cause error
Code language: SQL (Structured Query Language) (sql)
In this case, you can use the
NULLIF
function to prevent the division by zero as follows:
SELECT 1/NULLIF(0,0); -- return NULL
Code language: SQL (Structured Query Language) (sql)
Because zero is equal to zero, the expression
NULLIF(0,0)
returns NULL. As the result, the statement returns NULL.
Let’s take a look at the
orders
table in the
sample database
.
First, to get all orders created in June 2003, you use the following query:
SELECT
orderNumber, orderdate, requiredDate, shippedDate, status
orders
WHERE
orderDate BETWEEN '2003-06-01' AND '2003-06-30';
Code language: SQL (Structured Query Language) (sql)
Second, calculate the number of shipped orders / the number of cancelled orders in June 2003, you use the SUM and IF functions.
SELECT SUM(IF(status = 'Shipped',1,0)) /
SUM(IF(status = 'Cancelled',1,0))
FROM orders
WHERE orderDate BETWEEN '2003-06-01' and '2003-06-30';
Code language: SQL (Structured Query Language) (sql)
MySQL issues an error because in June 2003 there was no cancelled order created. It means that expression
SUM(IF(status = 'Cancelled',1,0))
returns zero.
Third, to prevent the division by zero error, you use the
NULLIF
function as the following query:
SELECT