Mysql
 sql >> Database >  >> RDS >> Mysql

Spiegazione di MySQL ISNULL()

In MySQL, il ISNULL() la funzione ci consente di verificare se un valore è null o no. Se è null , quindi 1 viene restituito, altrimenti 0 viene restituito.

Sintassi

ISNULL(expr)

Esempio

Ecco un semplice esempio da dimostrare:

SELECT ISNULL( null );

Risultato:

1

In questo caso, l'espressione è null e quindi l'output è 1 .

Eccolo con un non null valore:

SELECT ISNULL( 'Cake' );

Risultato:

0

Questa volta il risultato è 0 (perché l'espressione non è null ).

Espressioni

ISNULL() controlla il risultato di qualsiasi espressione. Quindi, se facciamo quanto segue, ad esempio:

SELECT ISNULL( 3 / 0 );

Otteniamo questo:

1

Quindi, anche se non abbiamo specificato null come argomento, il risultato dell'espressione è null , e così ISNULL() restituisce 1 .

Questo può essere dimostrato più chiaramente con il prossimo esempio:

SELECT 
    3 / 0,
    ISNULL( 3 / 0 );

Risultato:

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

Nella prima colonna possiamo vedere che il calcolo stesso ha prodotto un valore nullo, quindi la seconda colonna ha restituito 1 .

Già che ci siamo, ecco gli avvisi:

SHOW WARNINGS

Risultato:

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

Siamo stati avvisati che abbiamo provato a dividere per zero (che si traduce in un valore nullo).

Esempio di database

Supponiamo di avere una tabella di database come questa:

SELECT * FROM Pets;

Risultato:

+-------+-----------+---------+---------+------------+
| 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 |
+-------+-----------+---------+---------+------------+

Ecco una query che utilizza ISNULL() funzione contro quella tabella:

SELECT
    PetId,
    PetName,
    ISNULL( DOB ) AS "DOB is Missing?"
FROM Pets;

Risultato:

+-------+---------+-----------------+
| 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 |
+-------+---------+-----------------+

In tal caso, abbiamo creato una colonna che mostra 1 per tutti gli animali domestici che non hanno nulla nella loro colonna DOB.

Diciamo che vogliamo restituire tutti gli animali domestici che non hanno una data di nascita elencata (cioè il loro DOB il campo è null ). In questo caso, possiamo fare quanto segue:

SELECT * FROM Pets
WHERE ISNULL(DOB) = 1;

Risultato:

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

Ciò produce lo stesso risultato di quanto segue:

SELECT * FROM Pets
WHERE DOB IS NULL;

Risultato:

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