Saltar al contenido principal
eLearner.app
Módulo 5 · Lección 3 de 419/57 en el curso~10 min
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

SQL
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'è match

A 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:

SQL
-- 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:

  1. LEFT JOIN adjunta las reseñas de cada producto, si las hubiera;
  2. para productos sin reseñas, todas las columnas r son NULL;
  3. WHERE r.id IS NULL conserva 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:

SQL
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

Ejercicio#sql.m5.l3.e1
Intentos: 0Cargando...

Trova tutti i prodotti che non hanno mai ricevuto una recensione. Mostra solo el nombre de la colonna. Ordina por nombre.

Cargando editor...
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

Ejercicio#sql.m5.l3.e2
Intentos: 0Cargando...

Trova i clienti che non hanno mai ordinato nulla. Mostra correo electrónico. Ordina por correo electrónico.

Cargando editor...
Mostrar pista

Stesso patrón dell'esercizio precedente, ma fra clientes e pedidos.

Solución disponible después de 3 intentos