sql >> Base de Datos >  >> RDS >> Mysql

MySQL ISNULL () explicado

En MySQL, ISNULL() La función nos permite verificar si un valor es null o no. Si es null , luego 1 se devuelve, de lo contrario 0 es devuelto.

Sintaxis

ISNULL(expr)

Ejemplo

Aquí hay un ejemplo simple para demostrarlo:

SELECT ISNULL( null );

Resultado:

1

En este caso, la expresión es null y entonces la salida es 1 .

Aquí está con un no null valor:

SELECT ISNULL( 'Cake' );

Resultado:

0

Esta vez el resultado es 0 (porque la expresión no es null ).

Expresiones

ISNULL() comprueba el resultado de cualquier expresión. Entonces, si hacemos lo siguiente, por ejemplo:

SELECT ISNULL( 3 / 0 );

Obtenemos esto:

1

Entonces, aunque no especificamos null como argumento, el resultado de la expresión es null , y así ISNULL() devuelve 1 .

Esto se puede demostrar más claramente con el siguiente ejemplo:

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

Resultado:

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

En la primera columna podemos ver que el cálculo en sí resultó en un valor nulo, por lo que la segunda columna devolvió 1 .

Mientras estamos en eso, aquí están las advertencias:

SHOW WARNINGS

Resultado:

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

Se nos advierte que intentamos dividir por cero (lo que da como resultado un valor nulo).

Ejemplo de base de datos

Supongamos que tenemos una tabla de base de datos 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 |
+-------+-----------+---------+---------+------------+

Aquí hay una consulta que usa ISNULL() función contra esa tabla:

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

En ese caso, creamos una columna que muestra 1 para todas las mascotas que no tienen nada en su columna DOB.

Digamos que queremos devolver todas las mascotas que no tienen una fecha de nacimiento en la lista (es decir, su DOB el campo es null ). En este caso, podemos hacer lo siguiente:

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

Resultado:

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

Eso produce el mismo resultado que hacer lo siguiente:

SELECT * FROM Pets
WHERE DOB IS NULL;

Resultado:

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