Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL ISNULL() explicado


No MySQL, o ISNULL() função nos permite verificar se um valor é null ou não. Se for null , então 1 é retornado, caso contrário 0 é devolvido.

Sintaxe

ISNULL(expr)

Exemplo


Aqui está um exemplo simples para demonstrar:
SELECT ISNULL( null );

Resultado:
1

Neste caso, a expressão é null e assim a saída é 1 .

Aqui está com um não-null valor:
SELECT ISNULL( 'Cake' );

Resultado:
0

Desta vez o resultado é 0 (porque a expressão não é null ).

Expressões


ISNULL() verifica o resultado de qualquer expressão. Então, se fizermos o seguinte, por exemplo:
SELECT ISNULL( 3 / 0 );

Obtemos isso:
1

Portanto, embora não tenhamos especificado null como argumento, o resultado da expressão é null , e assim ISNULL() retorna 1 .

Isso pode ser demonstrado mais claramente com o seguinte exemplo:
SELECT 
    3 / 0,
    ISNULL( 3 / 0 );

Resultado:
+-------+-----------------+
| 3 / 0 | ISNULL( 3 / 0 ) |
+-------+-----------------+
|  NULL |               1 |
+-------+-----------------+
1 row in set, 2 warnings (0.00 sec)

Na primeira coluna podemos ver que o próprio cálculo resultou em um valor nulo, e assim a segunda coluna retornou 1 .

Enquanto estamos nisso, aqui estão os avisos:
SHOW WARNINGS

Resultado:
+---------+------+---------------+
| Level   | Code | Message       |
+---------+------+---------------+
| Warning | 1365 | Division by 0 |
| Warning | 1365 | Division by 0 |
+---------+------+---------------+

Somos avisados ​​de que tentamos dividir por zero (o que resulta em um valor nulo).

Exemplo de banco de dados


Suponha que tenhamos uma tabela de banco de dados como esta:
SELECT * FROM Pets;

Resultado:
+-------+-----------+---------+---------+------------+
| PetId | PetTypeId | OwnerId | PetName | DOB        |
+-------+-----------+---------+---------+------------+
|     1 |         2 |       3 | Fluffy  | 2020-11-20 |
|     2 |         3 |       3 | Fetch   | 2019-08-16 |
|     3 |         2 |       2 | Scratch | 2018-10-01 |
|     4 |         3 |       3 | Wag     | 2020-03-15 |
|     5 |         1 |       1 | Tweet   | 2020-11-28 |
|     6 |         3 |       4 | Fluffy  | 2020-09-17 |
|     7 |         3 |       2 | Bark    | NULL       |
|     8 |         2 |       4 | Meow    | NULL       |
|     9 |         3 |       1 | Woof    | 2020-10-03 |
|    10 |         4 |       5 | Ears    | 2022-01-11 |
+-------+-----------+---------+---------+------------+

Aqui está uma consulta que usa o ISNULL() função contra essa tabela:
SELECT
    PetId,
    PetName,
    ISNULL( DOB ) AS "DOB is Missing?"
FROM Pets;

Resultado:
+-------+---------+-----------------+
| PetId | PetName | DOB is Missing? |
+-------+---------+-----------------+
|     1 | Fluffy  |               0 |
|     2 | Fetch   |               0 |
|     3 | Scratch |               0 |
|     4 | Wag     |               0 |
|     5 | Tweet   |               0 |
|     6 | Fluffy  |               0 |
|     7 | Bark    |               1 |
|     8 | Meow    |               1 |
|     9 | Woof    |               0 |
|    10 | Ears    |               0 |
+-------+---------+-----------------+

Nesse caso, criamos uma coluna que exibe 1 para todos os animais de estimação que não têm nada em sua coluna DOB.

Digamos que queremos devolver todos os animais de estimação que não têm uma data de nascimento listada (ou seja, seu DOB campo é null ). Neste caso, podemos fazer o seguinte:
SELECT * FROM Pets
WHERE ISNULL(DOB) = 1;

Resultado:
+-------+-----------+---------+---------+------+
| PetId | PetTypeId | OwnerId | PetName | DOB  |
+-------+-----------+---------+---------+------+
|     7 |         3 |       2 | Bark    | NULL |
|     8 |         2 |       4 | Meow    | NULL |
+-------+-----------+---------+---------+------+

Isso produz o mesmo resultado que fazer o seguinte:
SELECT * FROM Pets
WHERE DOB IS NULL;

Resultado:
+-------+-----------+---------+---------+------+
| PetId | PetTypeId | OwnerId | PetName | DOB  |
+-------+-----------+---------+---------+------+
|     7 |         3 |       2 | Bark    | NULL |
|     8 |         2 |       4 | Meow    | NULL |
+-------+-----------+---------+---------+------+