27th Feb 2025 Lectura de 8 minutos 10 ejercicios NULL para principiantes Ekre Ceannmor NULL ejercicio de SQL Índice Conozca los Datos Ejercicios SQL NULL 1. Jefes de Equipo 2. Departamentos Establecidos 3. Bonificaciones perdidas 4. Bonificaciones pequeñas 5. Empleados en línea 6. Empleados y regiones 7. Recuento regional 8. Relación entre primas y salarios 9. Recuento departamental 10. Funciones por departamento ¿Sediento de Más Ejercicios Prácticos de SQL NULL? ¿Quieres practicar manejando valores NULL en tus consultas? ¡Echa un vistazo a estos 10 nuevos ejercicios de práctica NULL! Dominar SQL requiere mucha práctica. Aunque aprender la teoría es importante, la práctica es una de las mejores formas de mantener al día tus conocimientos de SQL. En este artículo, te presentamos 10 ejercicios de NULL para que los analices, completos con soluciones y explicaciones. Tratar con NULL puede pillar desprevenidos a los principiantes en SQL. NULL no se comporta como los datos normales; representa la ausencia total de información, lo que puede dificultar su comprensión al principio. Los siguientes ejercicios de SQL te ayudarán a afinar tus habilidades en el tema de los NULLs. Cubriremos todas las complejidades de trabajar con NULLs y practicaremos una amplia gama de casos de uso que involucran datos faltantes. Y si quieres practicar un poco más después de esto - no sólo con NULLs, sino con la totalidad de SQL - prueba nuestro Ejercicio de SQL Track. Contiene más de 1250 ejercicios prácticos que te ayudarán a dominar SQL. Y como todo sucede en tu navegador, no hay nada que configurar o descargar. ¿Listo para algunos ejercicios de práctica de SQL NULL? Entremos de lleno. Conozca los Datos Para este conjunto de ejercicios, utilizaremos dos tablas: employee y department. Eche un vistazo a algunos datos de muestra de cada tabla: employee idnamesalarybonuspositiondepartment_idmanager_id 1John Doe55001250CEO1NULL 2Jane Doe47501100CTO1NULL 3Mike Johnson2900NULLHead Accountant2NULL 4Sarah Brown23500Accountant23 5James Clark2500NULLHead of Marketing3NULL 6Emily Davis3100NULLSoftware Developer42 En la tabla de empleados, algunas columnas pueden tener valores perdidos (NULL). Por ejemplo, manager_id es NULL para todos los empleados que no tienen otro empleado que los supervise (es decir, el propio gerente). Y la información de salary y bonus puede faltar en caso de que no sean aplicables a ese empleado en concreto. department idnameregion 1Executive TeamCentral Hub 2AccountingNorthwest 3SalesWest Coast 4DevelopmentNULL En la tabla department tabla, sólo la región puede ser NULL. Esto indica que el departamento opera en línea. Volveremos sobre esto en los ejercicios. Ejercicios SQL NULL 1. Jefes de Equipo Ejercicio: Mostrar información sobre todos los jefes de equipo (es decir, los empleados que no tienen un manager_id). Solución: SELECT * FROM employee WHERE manager_id IS NULL; Explicación: Para filtrar por los empleados que no tienen un manager_id, necesitamos usar el operador IS NULL. El uso de operadores regulares como = o != con NULLs no funciona como se espera en SQL. Si los utilizas, el resultado siempre será NULL y la condición WHERE fallará. Si quisiéramos mostrar todos los empleados que no son jefes de equipo, la condición de filtrado sería WHERE manager_id IS NOT NULL. Puedes leer más sobre qué son los NULLs y cómo funcionan en NULLs and Handling Missing Data in SQL. 2. Departamentos Establecidos Ejercicio: Mostrar todos los departamentos físicos (es decir, los que tienen un valor de región). Los departamentos sin región funcionan en línea. Solución: SELECT * FROM department WHERE region IS NOT NULL; Explicación: Utilice el mismo principio para filtrar que comentamos en el ejercicio anterior. En este caso, deberá utilizar el operador IS NOT NULL. 3. Bonificaciones perdidas Ejercicio: Mostrar el número de empleados a los que les falta una gratificación. Solución: SELECT COUNT(*) FROM employee WHERE bonus IS NULL; Explicación: Filtre los empleados sin bonificación utilizando el operador IS NULL. Utilice la función agregada COUNT() para contar el número de empleados sin bonificación. Nota: Asegúrese de utilizar el argumento adecuado para la función COUNT(), ya que COUNT(bonus) WHERE bonus IS NULL siempre devolverá 0. 4. Bonificaciones pequeñas Ejercicio: Muestre todos los empleados que recibieron un bono menor a 300, incluyendo los empleados que no tienen un bono registrado. Muestre primero a los empleados sin bonificación registrada y luego ordene a los empleados de menor a mayor bonificación. Solución: SELECT * FROM employee WHERE bonus < 300 OR bonus IS NULL ORDER BY bonus NULLS FIRST; Explicación: Aquí, la condición se divide en dos partes: Bonificaciones inferiores a 300, y Bonificaciones no registradas. Podemos usar el operador < (menor que) en la primera parte, pero la segunda parte necesitará el operador IS NULL. Recuerde que NULL no es "mayor" ni "menor" que 300, por lo que deberá utilizar IS NULL específicamente. Une las dos condiciones con el operador OR. Para ordenar las filas por bonificación, utilice una cláusula ORDER BY. Por defecto, las filas se ordenarán en orden ascendente (es decir, de menor a mayor bonificación). Para especificar explícitamente que las filas NULL deben ir primero en el resultado, utilice la cláusula NULLS FIRST. 5. Empleados en línea Ejercicio: Encuentre todos los empleados que trabajan en departamentos remotos (es decir, aquellos en los que la región es NULL). Mostrar el nombre del empleado y el nombre del departamento. Solución: SELECT employee.name AS employee, department.name AS department FROM employee JOIN department ON employee.department_id = department.id WHERE department.region IS NULL; Explicación: Una los employee y department para acceder tanto al nombre del empleado como al del departamento name. Renombre las columnas con la palabra clave AS para evitar nombres duplicados. A continuación, filtre el resultado por el departamento region, manteniendo sólo las filas en las que la región IS NULL. 6. Empleados y regiones Ejercicio: Para cada empleado, muestre su nombre, el nombre de su departamento asignado y la región en la que se encuentra su departamento. Para los empleados de departamentos en los que falte una región, muestre ‘Online’ como región. Solución: SELECT employee.name AS employee, department.name AS department, COALESCE(region, ‘Online’) AS region FROM employee JOIN department ON employee.department_id = department.id; Explicación: Para mostrar tanto el nombre del empleado como el nombre y la región del departamento, una las tablas. Los empleados de departamentos sin región tendrán NULL como valor de esa columna. Para sustituirlo, podemos utilizar la función COALESCE(): mantendrá los valores no nulos, pero sustituirá los NULLs en el resultado por un nuevo valor que nosotros proporcionemos (‘Online’). Si quieres saber más sobre cómo funciona esta función, consulta nuestro artículo sobre La función COALESCE(). 7. Recuento regional Ejercicio: Muestre cada región de la base de datos junto con el número de empleados que trabajan en esa región. Muestre ‘Online’ como región para los empleados que no tengan una. Solución: SELECT COALESCE(region, ‘Online’) AS region, COUNT(*) FROM employee JOIN department ON employee.department_id = department.id GROUP BY region; Explicación: Unir los employee y department tablas. Al igual que en el ejercicio anterior, utilice la función COALESCE() para sustituir las regiones que faltan por "En línea". Añada la función agregada COUNT() para obtener el número de empleados de cada región y, a continuación, agrupe el resultado por la columna región. Nota: No es necesario utilizar COALESCE() en la cláusula GROUP BY. COALESCE() sustituye a todas las NULLs por el mismo valor, por lo que el número de grupos y las filas que contienen no cambian. 8. Relación entre primas y salarios Ejercicio: Para cada empleado, muestre su nombre y la relación entre su bonificación y su salario. Si la prima es 0, indique NULL. Solución: SELECT name, NULLIF(bonus, 0) / salary AS ratio FROM employee; Explicación: A la hora de calcular la relación entre el salario y el bonus, recuerda que el bonus puede ser 0 y no queremos mostrar 0 en el resultado final. Para evitarlo, podemos utilizar la función NULLIF() con la columna bonus. Esta función comprueba si el bonus es 0; si lo es, sustituye el 0 por NULL. Cualquier operación aritmética que incluya NULL devolverá NULL. Así que si el bono es NULL, el cociente también será NULL. 9. Recuento departamental Ejercicio: Para cada departamento, cuente el número de empleados que trabajan en él. Incluya todos los departamentos, incluso los que no tienen empleados asignados. Ignore los empleados sin departamento. Solución: SELECT department.name AS department, COUNT(employee.id) AS employees FROM department LEFT JOIN employee ON department.id = employee.department_id GROUP BY department.name, department.id; Explicación: Una los department y employee tablas. Para asegurarse de que los departamentos sin empleados aparecen en el resultado, utilice LEFT JOIN y coloque la tabla department primero. Cuente los ID de los empleados para evitar contar filas NULL, y agrupe el resultado por el nombre del departamento y id (en caso de que dos departamentos tengan el mismo nombre). 10. Funciones por departamento Ejercicio: Muestre el nombre de cada departamento, la región y el número de roles diferentes dentro de él. Asegúrese de que existe una sección de "no asignados" para los empleados sin departamento asignado. Solución: SELECT COALESCE(department.name, ‘unassigned’) AS department, region, COUNT(DISTINCT position) AS different_positions FROM department FULL OUTER JOIN employee ON employee.department_id = department.id GROUP BY department.region, department.name, department.id Explicación: Una las secciones department y employee mediante FULL OUTER JOIN para asegurarse de que se muestran los departamentos sin empleados y los empleados sin departamentos. El orden de las tablas no importa aquí. Para tratar los empleados sin departamento, utilice la función COALESCE() para sustituir el nombre del departamento por ‘unassigned’. Cuente el número de puestos diferentes en cada departamento utilizando COUNT(DISTINCT position). Puede obtener más información sobre el uso de la palabra clave DISTINCT en nuestro artículo del libro de recetas. Agrupe el resultado por región, nombre e id del departamento. Observe que 'unassigned' es uno de los grupos resultantes. ¿Sediento de Más Ejercicios Prácticos de SQL NULL? ¡Bien hecho! ¡Has aprendido bastante sobre el manejo de NULLs en SQL! Si quieres más ejercicios de práctica, echa un vistazo a nuestra extensa PistaEjercicio de SQL . Además de NULLs, cubre todos los temas que existen para ayudarte a mantener tus habilidades en SQL. ¡Feliz práctica! Tags: NULL ejercicio de SQL