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