Lecciones del módulo (3/4)
OUTER JOIN: encontrar los "huecos"
En el Módulo 3 viste LEFT JOIN: mantén todas las filas a la izquierda, incluso aquellas
sin coincidencia a la derecha (que se convierten en NULL). En este capítulo nosotros
amplíe el conjunto de herramientas con RIGHT JOIN y FULL OUTER JOIN, y aprenderemos
cómo usarlos para encontrar los "agujeros" en los datos: filas en una tabla que
no tienen contrapartida en el otro.
Los tres tipos de UNIÓN EXTERNA
A LEFT JOIN B ON … -- tutte le righe di A, con o senza match in B
A RIGHT JOIN B ON … -- tutte le righe di B, con o senza match in A
A FULL JOIN B ON … -- tutte le righe di A *e* di B; NULL dove non c'è matchA RIGHT JOIN B siempre se puede reescribir como B LEFT JOIN A con el mismo
ON: es una cuestión de legibilidad. Muchos estilos (incluido este curso)
Prefiero usar siempre LEFT JOIN para mantener la coherencia.
El patrón "anti-unión": encontrar los que faltan
El uso más común de LEFT JOIN no es "enriquecer con los datos del
derecha", pero busque las filas de la izquierda que NO coinciden en el
correcto. Se llama anti-unión:
-- Prodotti senza nessuna recensione:
SELECT p.id, p.name
FROM products p
LEFT JOIN reviews r ON r.product_id = p.id
WHERE r.id IS NULL
ORDER BY p.id;Lógica del patrón:
LEFT JOINadjunta las reseñas de cada producto, si las hubiera;- para productos sin reseñas, todas las columnas
rsonNULL; WHERE r.id IS NULLconserva sólo esos productos.
Verificación de clave: un id IS NULL en una columna NO NULA de la tabla de la derecha
significa "no hubo coincidencia". A menudo filtras por el PK de la derecha.
tabla precisamente por este motivo.
UNIÓN EXTERNA COMPLETA
FULL OUTER JOIN mantiene ambos lados sin coincidencia. Rara vez se usa,
normalmente para comprobaciones de integridad de datos:
SELECT c.id AS customer_id, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id
WHERE c.id IS NULL OR o.id IS NULL;Las filas con c.id IS NULL serían órdenes huérfanas (un customer_id que
no existe en customers). Los que tienen o.id IS NULL son clientes
sin órdenes. En nuestro conjunto de datos, las claves externas garantizan que ningún huérfano
existen órdenes; sólo quedan los clientes sin pedidos.
Pruébalo tú mismo
Trova tutti i prodotti che non hanno mai ricevuto una recensione. Mostra solo el nombre de la colonna. Ordina por nombre.
Mostrar pista
Patrón anti-unión: LEFT JOIN revisa su product_id, poi WHERE r.id IS NULL.
Solución disponible después de 3 intentos
Ejercicio de revisión
Trova i clienti che non hanno mai ordinato nulla. Mostra correo electrónico. Ordina por correo electrónico.
Mostrar pista
Stesso patrón dell'esercizio precedente, ma fra clientes e pedidos.
Solución disponible después de 3 intentos