03/04
Lección 3 · 35 min

Cruzar dos tablas

Cuando termines sabrás: Sé juntar dos listas por la columna que las relaciona y detectar lo que se queda fuera.

Cruzar es responder preguntas que ninguna tabla contesta sola: cuánto ha gastado cada cliente, qué contactos no han recibido nunca un mensaje, qué campaña trajo a quién.

Juntar

select c.nombre, count(p.id) as pedidos
from   clientes c
join   pedidos  p on p.cliente_id = c.id
group by c.nombre
order by pedidos desc;

Léelo en voz alta: coge clientes, pégale sus pedidos por el identificador, agrupa por nombre y cuenta.

Lo que se queda fuera es la información

join normal solo devuelve lo que casa en las dos tablas. Los clientes sin ningún pedido desaparecen del resultado, y muchas veces esos son justo los que te interesan. Para verlos:

select c.nombre
from   clientes c
left join pedidos p on p.cliente_id = c.id
where  p.id is null;

Ese left join con is null es la consulta de “quién falta”. Sirve para clientes sin comprar, contactos sin escribir y facturas sin cobrar.

La trampa de los totales

Si cruzas una tabla con otra que tiene varias filas por elemento, los importes se multiplican y el total sale inflado. Cuando un número te sorprenda para bien, desconfía y cuenta las filas antes de creértelo.

Ejercicio

  1. Saca tus diez clientes con más actividad.
  2. Saca los que llevan más de 60 días sin nada.
  3. Comprueba que la suma de los dos grupos cuadra con el total.

Elige el cruce antes de escribirlo

Pregunta primero qué filas deben sobrevivir. Si solo quieres clientes con pedidos, join sirve. Si también necesitas ver a quien nunca compró, el punto de partida es clientes y el cruce es left join. Esa decisión se toma desde la pregunta, no probando palabras hasta que sale una tabla bonita.

Comprueba la cardinalidad

Cuenta cuántas filas puede aportar cada lado. Un cliente tiene muchos pedidos; un pedido puede tener muchas líneas. Si unes las tres tablas, el cliente y el pedido se repiten una vez por línea. Eso puede ser correcto para analizar productos y falso para sumar importes del pedido.

Antes y después del cruce, registra:

  1. Filas totales.
  2. Identificadores distintos.
  3. Filas sin pareja.
  4. Suma de una cifra de control.

Comprueba antes de continuar

  • La columna de unión representa el mismo identificador en ambas tablas.
  • Sabes qué filas desaparecen con el tipo de cruce elegido.
  • Has medido si el cruce multiplica registros.
  • El total final cuadra con una cifra independiente.

Quédate con esto

Cruzar no es pegar columnas. Es decidir qué relación existe y qué debe ocurrir con lo que no encuentra pareja. Las filas que faltan suelen contener la pregunta más valiosa.