DÍA 11Relaciones entre tablas · SQL para Análisis de Datos

Encuentra títulos de Sakila aunque no tengan copias registradas en inventory.

Día 11 18 minInicial

Conservar filas con LEFT JOIN

Objetivos

Vas a conservar todas las filas de una tabla y detectar cuáles no encontraron una pareja en la otra.

Concepto

JOIN combina filas de tablas relacionadas mediante una condición como ON film.film_id = inventory.film_id. INNER JOIN conserva las filas que encuentran coincidencia. LEFT JOIN conserva todas las filas de la tabla escrita a la izquierda y añade los datos coincidentes de la derecha; si no encuentra pareja, las columnas de esa tabla aparecen como NULL. Así puedes listar todo el catálogo film, incluso los títulos sin una fila relacionada en inventory.

NULL significa que no hay un valor relacionado; no es cero ni una cadena vacía. Por eso se comprueba con IS NULL, no con = NULL.

Ejemplo

Busca películas sin copias registradas:

SELECT f.film_id, f.title, i.inventory_id, i.store_id
FROM film AS f
LEFT JOIN inventory AS i
  ON i.film_id = f.film_id
WHERE i.inventory_id IS NULL
ORDER BY f.film_id
LIMIT 10;

film queda a la izquierda para conservar el catálogo completo. Cuando no existe una copia, i.inventory_id queda en NULL y la condición selecciona justo esos títulos.

Nota

Error común: escribir WHERE i.store_id = 1 después del LEFT JOIN elimina las filas sin inventario, porque su store_id es NULL. Eso puede cambiar el resultado como si buscaras solo coincidencias.

Práctica guiada

  1. Quita el WHERE y observa que ahora pueden aparecer varias filas por película si tiene varias copias.
  2. Cambia el filtro por i.inventory_id IS NOT NULL para ver filas con coincidencia.
  3. Explica qué tabla se conserva en cada consulta.

Reto

Lista hasta diez filas de películas cuyo título empieza con la letra A. Usa LEFT JOIN y devuelve film_id, title e inventory_id; ordena por identificador de película y luego por inventario. Explica por qué una película puede aparecer en varias filas y por qué una copia ausente se ve como NULL.

Quiz

Si una película no tiene fila relacionada en inventory, ¿qué valor aparece en i.inventory_id tras el LEFT JOIN?

  • A. 0.
  • B. Una cadena vacía.
  • C. NULL.

Respuesta: C. La ausencia de una coincidencia se representa con NULL.

Comprobación

Sabes conservar registros sin pareja. La siguiente consulta sigue la ruta film → film_category → category para describir cada relación.

TU PROGRESO

Cargando estado…