MySQL NULLIF

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 NULLIFfunção é uma das funções de fluxo de controle que aceita 2 argumentos. A NULLIFfunção retorna NULLse o primeiro argumento for igual ao segundo argumento, caso contrário retorna o primeiro argumento.

A sintaxe da NULLIFfunção é a seguinte:

NULLIF(expression_1,expression_2);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A NULLIFfunção retorna NULLif expression_1 = expression_2is true, caso contrário retornaexpression_1

Observe que a NULLIFfunçã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 NULLIFfunção com uma função semelhante chamada função IFNULL .

Exemplos NULLIF do MySQL

Vamos dar uma olhada em alguns exemplos de uso da NULLIFfunção para entender como ela funciona.

SELECT NULLIF(1,1); -- return NULLLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

SELECT NULLIF(1,2); -- return 1
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

SELECT NULLIF('MySQL NULLIF','MySQL NULLIF'); -- return NULL
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

SELECT NULLIF('MySQL NULLIF','MySQL IFNULL'); -- return MySQL NULLIF
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

SELECT NULLIF(1,NULL); -- return 1 because 1 <=> NULL
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

SELECT NULLIF(NULL,1); -- return NULL the first argument
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

Como funcionam as declarações.

  • NULIF(1,1)retorna NULLporque 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')retorna NULLporque dois argumentos são a mesma string
  • NULLIF('MySQL NULLIF','MySQL NULLIF')retorna MySQL NULLIFporque 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 seja NULL, porque NULLnão é igual a 1.

Usando a função NULLIF para evitar erro de divisão por zero

Freqüentemente usamos a NULLIFfunção para evitar o erro de divisão por zero em uma consulta. Se o servidor MySQL tiver ERROR_FOR_DIVISION_BY_ZEROo modo habilitado, ele emitirá um erro quando ocorrer uma divisão por zero.

Veja a seguinte declaração:

SELECT 1/0; -- cause errorLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

Neste caso, você pode usar a NULLIFfunção para evitar a divisão por zero da seguinte forma:

SELECT 1/NULLIF(0,0); -- return NULLLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

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 orderstabela do banco de dados de exemplo .

tabela de pedidos

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 )

Experimente

Exemplo MySQL NULLIF

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 )

Experimente

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 NULLIFfunçã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 )

Experimente

Exemplo de função MySQL NULLIF

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 NULLvalor.

Neste tutorial, apresentamos a NULLIFfunção, que é muito útil em alguns casos, como evitar erros de divisão por zero em consultas.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *