Unir clientes y pagos
Objetivos
Conectarás dos tablas de Sakila mediante una clave compartida y leerás el grano del resultado antes de analizarlo.
Concepto
payment guarda transacciones y customer guarda personas. Un JOIN es la operación SQL que combina filas relacionadas de dos tablas. Como customer_id aparece en ambas, la consulta puede conectar cada pago con su cliente.
El identificador único payment_id identifica cada fila del resultado: una fila representa un pago. A esto se le llama el grano del resultado: qué representa cada fila. No significa “una fila por cliente”; el mismo cliente puede aparecer varias veces.
Ejemplo
Consulta compatible con MySQL 8 y con el esquema sakila:
SELECT
p.payment_id,
p.customer_id,
c.first_name,
c.last_name,
c.store_id,
p.rental_id,
p.amount,
p.payment_date
FROM payment AS p
INNER JOIN customer AS c
ON c.customer_id = p.customer_id
ORDER BY p.payment_id
LIMIT 8;INNER JOIN conserva pagos cuyo customer_id encuentra un cliente. En Sakila, rental_id puede ser nulo; esta consulta no la usa como condición, así que esos pagos también pueden aparecer.
Nota
Ojo con el grano: la clave del resultado es payment_id. Si después cuentas clientes, cuenta clientes distintos; sumar filas aquí significa contar pagos.
Práctica guiada
- Señala qué columnas vienen de
paymenty cuáles decustomer. - Comprueba que
p.customer_idse compara conc.customer_id. - Cambia
LIMIT 8porLIMIT 20sin quitar el orden.
Reto
Añade p.staff_id al resultado. Después explica por qué dos filas pueden compartir el mismo customer_id y aun así representar pagos diferentes.
Quiz
En el resultado, ¿qué representa una fila?
- A. Un cliente.
- B. Un pago.
- C. Una tienda.
Respuesta: B. payment_id identifica cada transacción.
Siguiente paso
El extracto de muestra de este SELECT es la base de los ejercicios iniciales de Python. El archivo CSV (valores separados por comas) del proyecto está etiquetado como archivo de práctica (fixture): sus valores son ilustrativos, no una exportación oficial de la base.