Resumo : neste tutorial, você aprenderá sobre a função NULLIF do MySQL e como usá-la para evitar o erro de divisão por zero em uma consulta.
Introdução à função MySQL NULLIF
A NULLIF
função é uma das funções de fluxo de controle que aceita 2 argumentos. A NULLIF
função retorna NULL
se o primeiro argumento for igual ao segundo argumento, caso contrário retorna o primeiro argumento.
A sintaxe da NULLIF
função é a seguinte:
NULLIF(expression_1,expression_2);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A NULLIF
função retorna NULL
if expression_1 = expression_2
is true
, caso contrário retornaexpression_1
Observe que a NULLIF
função é semelhante à seguinte expressão que usa a expressão CASE :
CASE WHEN expression_1 = expression_2
THEN NULL
ELSE
expression_1
END;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Observe que você não deve confundir a NULLIF
função com uma função semelhante chamada função IFNULL .
Exemplos NULLIF do MySQL
Vamos dar uma olhada em alguns exemplos de uso da NULLIF
função para entender como ela funciona.
SELECT NULLIF(1,1); -- return NULL
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
SELECT NULLIF(1,2); -- return 1
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
SELECT NULLIF('MySQL NULLIF','MySQL NULLIF'); -- return NULL
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
SELECT NULLIF('MySQL NULLIF','MySQL IFNULL'); -- return MySQL NULLIF
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
SELECT NULLIF(1,NULL); -- return 1 because 1 <=> NULL
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
SELECT NULLIF(NULL,1); -- return NULL the first argument
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como funcionam as declarações.
-
NULIF(1,1)
retornaNULL
porque 1 é igual a 1. NULLIF(1,2)
retorna 1, que é o primeiro argumento, porque 1 não é igual a 2.NULLIF('MySQL NULLIF','MySQL NULLIF')
retornaNULL
porque dois argumentos são a mesma stringNULLIF('MySQL NULLIF','MySQL NULLIF')
retornaMySQL NULLIF
porque duas strings não são iguais.NULLIF(1,NULL)
retorna 1 porque 1 não é igual aNULL
NULLIF(NULL,1)
retorne o primeiro argumento, ou sejaNULL
, porqueNULL
não é igual a 1.
Usando a função NULLIF para evitar erro de divisão por zero
Freqüentemente usamos a NULLIF
função para evitar o erro de divisão por zero em uma consulta. Se o servidor MySQL tiver ERROR_FOR_DIVISION_BY_ZERO
o modo habilitado, ele emitirá um erro quando ocorrer uma divisão por zero.
Veja a seguinte declaração:
SELECT 1/0; -- cause error
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste caso, você pode usar a NULLIF
função para evitar a divisão por zero da seguinte forma:
SELECT 1/NULLIF(0,0); -- return NULL
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como zero é igual a zero, a expressão NULLIF(0,0)
retorna NULL. Como resultado, a instrução retorna NULL.
Vamos dar uma olhada na orders
tabela do banco de dados de exemplo .
Primeiro, para obter todos os pedidos criados em junho de 2003, use a seguinte consulta:
SELECT
orderNumber, orderdate, requiredDate, shippedDate, status
FROM
orders
WHERE
orderDate BETWEEN '2003-06-01' AND '2003-06-30';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Em segundo lugar, calcule o número de pedidos enviados / o número de pedidos cancelados em junho de 2003, usando as funções SUM e IF .
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';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O MySQL emite um erro porque em junho de 2003 não houve nenhum pedido cancelado criado. Isso significa que a expressão SUM(IF(status = 'Cancelled',1,0))
retorna zero.
Terceiro, para evitar o erro de divisão por zero, você usa a NULLIF
função como a seguinte consulta:
SELECT
SUM(IF(status = 'Shipped', 1, 0)) /
NULLIF(SUM(IF(status = 'Cancelled', 1, 0)), 0)
FROM
orders
WHERE
orderDate BETWEEN '2003-06-01' AND '2003-06-30';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como não houve nenhum pedido cancelado criado em junho de 2003, a SUM(IF(status = 'Cancelled',1,0)
expressão retorna zero, o que também faz com que a NULLIF(SUM(IF(status = 'Cancelled',1,0),0)
expressão retorne um NULL
valor.
Neste tutorial, apresentamos a NULLIF
função, que é muito útil em alguns casos, como evitar erros de divisão por zero em consultas.