bases de datos

MySQL y el operador de coalescencia o COALESCE

Introducción

Nota: mira la diferencia entre coalesce y la función ifnull.

El operador de coalescencia (que de hecho no es un operador sino una función) toma una lista variable de argumentos y devuelve el primero que encuentre que no sea nulo.

Explicado con palabras sencillas, llamamos a COALESCE con una lista de argumentos.

Si, por ejemplo, la lista es esta:

COALESCE(NULL, 0, "Hola")

Devolverá 0

Si la lista es:

COALESCE(NULL, NULL, "Hola")

Devolverá “Hola”

Evalúa cada elemento de izquierda a derecha. Si el primero es nulo, pasa al segundo. Si el segundo lo es, pasa al tercero, y así hasta terminar con la lista.

Esto sirve cuando puede que un resultado devuelva NULL, y queremos que en lugar de eso devuelva otro valor. Un ejemplo podría ser el promedio de una consulta, que devuelve null en lugar de cero cuando no hay datos.

Ejemplo

Datos

Para entender mejor esta función, veamos esta tabla de mascotas que tengo. Vemos que la edad es un número entero.

Suma de edades

Ahora, si yo quisiera sacar la suma de edades podría hacer la siguiente consulta:

SELECT SUM(edad) FROM mascotas;

Todo sale de maravilla, la suma es 40.

Pero bueno, eso fue porque yo ya tengo datos en la tabla. ¿Qué pasa si ponemos un sistema para un cliente y no hay datos? bueno, veamos.

Vaciando tabla

Voy a borrar los datos de la tabla con la siguiente consulta:

TRUNCATE mascotas;

Al consultar, no hay nada:

Ejecutando suma de nuevo

Uno esperaría que al ejecutar la siguiente consulta…

SELECT SUM(edad) FROM mascotas;

El resultado sea 0.

Pero al hacerla sobre la tabla vacía, devuelve NULL, como se ve a continuación:

Si nuestra base de datos es consumida por un lenguaje de programación, algo saldrá mal. En fin, pueden salir cientos de errores. Pero aquí es en donde la función de la que hablé viene al rescate.

Usando COALESCE para evitar el dato nulo

Ahora, en lugar de hacer la misma consulta para sumar, haré esto:

SELECT COALESCE(SUM(edad), 0) FROM mascotas;

Como en este caso SUM devolverá NULL, COALESCE tomará el siguiente elemento de la lista. ¿y cuál es? el 0.

Si la ejecuto sin datos, sale 0, como se muestra en la imagen:

Ingresaré algunos datos y si luego la vuelvo a ejecutar, sale la suma:

Por lo que COALESCE no afecta a nuestras consultas, sino que nos ayuda a manejar errores nulos. Podemos combinarla con cualquier otra función que devuelva NULL en caso de que no encuentre datos, como AVG.

 

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.