El valor nulo especial

Disponible

5.1 Falta de significado

El lenguaje SQL, como el lenguaje Java, tiene una palabra clave especial para indicar la ausencia de un valor: es nulo. O como suele escribirse - NULL.

El uso NULLen SQL es muy similar al uso de nulo en Java. En Java, puede haber objetos cuyos campos contengan valores nulos. En SQL, puede haber tablas cuyas filas contengan valores NULL.

Permítanme agregar un par de productos sin marca a nuestra tabla de productos a propósito. Si se desconoce la marca del producto, entonces el valor será NULL.

Para mostrar dichos productos, ordenemos nuestra tabla de productos por ID en orden inverso y tomemos 10 registros. La solicitud se verá así:

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

Obtenemos el siguiente resultado de la consulta:

identificación nombre marca precio contar
15 Remache NULO 0.01 1000
14 Tornillo NULO 0.10 1000
13 Pararse IKEA 100.00 10
12 maceta flor inteligente 99.00 9
once Sillón el bosco 44.00 8
10 Lámina el bosco 199.00 10
9 Vestidor IKEA 99.00 10
8 Lámpara LG 15.00 100
7 TELEVISOR LG 350.00 4
6 Estante el bosco 25.00 114

Sí, agregué remaches y tornillos a la mesa. Tienen precio y cantidad, pero no marca.

5.2 Comparación con NULL

¿Recuerdas que a veces solías enojarte en Java cuando usabas nulo? Que no puedes comparar variables que pueden hacer referencia a valores nulos a través de equals(). Ejemplo:

Product product1 = new Product();
Product product2 = null;
if (product2.equals(product1) {  //an exception will be raised here}

No lo vas a creer, pero en el lenguaje SQL también estás esperando los matices al trabajar con valores NULL. Y suena algo como esto:nada es NULO.

Si intenta filtrar todos los productos cuya marca es null:

SELECT * FROM product
WHERE brand = NULL

Obtendrá una tabla vacía:

identificación nombre marca precio contar

Pero si escribes en la consulta que marca no es igual a NULL, obtendrás el mismo resultado:

SELECT * FROM product
WHERE brand != NULL

Volverá a obtener una tabla vacía:

identificación nombre marca precio contar

Cualquier comparación/acción con NULL devolverá NULL:

Expresión Resultado
marca = NULL NULO
marca != NULL NULO
NULO = NULO NULO
NULO != NULO NULO

Sí,incluso si compara NULL con NULL, entonces la respuesta será NULL.

5.3 ES NULO y NO ES NULO

Entonces, ¿cómo verificamos que algún campo (o alguna columna) tenga un valor de NULL? Y para esto, SQL tiene una expresión especial: IS NULL. Se parece a esto.

variable IS NULL

Si desea verificar si una columna de su tabla no es igual a NULL, debe escribir IS NOT NULL:

variable IS NOT NULL

Escribamos una consulta que seleccione todos los productos de la tabla de productos cuya marca sea igual a NULL. Tal solicitud se vería así:

SELECT * FROM product
WHERE brand IS NULL

Y obtenemos el siguiente resultado de la consulta:

identificación nombre marca precio contar
14 Tornillo NULO 0.10 1000
15 Remache NULO 0.01 1000

Ahora vamos a mostrar todos los productos cuyo precio es inferior a $20:

SELECT * FROM product
WHERE price  < 20

Y obtenemos el siguiente resultado de la consulta:

identificación nombre marca precio contar
2 Silla IKEA 5.00 45
8 Lámpara LG 15.00 100
14 Tornillo NULO 0.10 1000
15 Remache NULO 0.01 1000

Ahora especificamos que el precio debe ser inferior a $20 y la marca no lo es NULL.

SELECT * FROM product
WHERE price  < 20 AND brand IS NOT NULL

Obtenemos el siguiente resultado de la consulta:

identificación nombre marca precio contar
2 Silla IKEA 5.00 45
8 Lámpara LG 15.00 100

Genial, las dos últimas líneas se han ido. Así es como funciona. Un poco inusual, pero aún así hay cierta lógica en esto.

1
Tarea
Módulo 4. Working with databases,  nivel 1lección 4
Bloqueada
task0145
task0145
1
Tarea
Módulo 4. Working with databases,  nivel 1lección 4
Bloqueada
task0146
task0146
1
Tarea
Módulo 4. Working with databases,  nivel 1lección 4
Bloqueada
task0147
task0147
1
Tarea
Módulo 4. Working with databases,  nivel 1lección 4
Bloqueada
task0148
task0148
1
Tarea
Módulo 4. Working with databases,  nivel 1lección 4
Bloqueada
task0149
task0149
1
Tarea
Módulo 4. Working with databases,  nivel 1lección 4
Bloqueada
task0150
task0150
Comentarios
  • Populares
  • Nuevas
  • Antiguas
Debes iniciar sesión para dejar un comentario
Esta página aún no tiene comentarios