Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

SQL para ciencia de datos, Unidad 4 — Joins para análisis de datos, 4.1 — Relacionar tablas ·

Por qué los datos están repartidos

Por qué los datos están repartidos

Introducción

En la ciencia de datos, los datos rara vez están presentes en una sola tabla. Es común que las bases de datos estén compuestas por múltiples tablas relacionadas entre sí, cada una con su conjunto específico de columnas y registros relevantes para un análisis particular. Esta distribución del dato es fundamental porque permite dividir la información en segmentos manejables, optimizar el almacenamiento y facilitar la realización de consultas complejas.

Por ejemplo, considera un sistema que registra transacciones financieras. Podríamos tener una tabla transacciones con detalles como el monto, la fecha y el tipo de transacción. Sin embargo, otra tabla podría contener información sobre los usuarios, incluyendo su nombre, dirección y número de cliente. Para obtener una visión completa del usuario que realizó cada transacción, necesitamos relacionar estos dos conjuntos de datos.

Explicación principal con ejemplos

Tablas relacionadas: Usuarios y Transacciones

Imaginemos las siguientes tablas:

Tabla usuarios:

| id | nombre | dirección | ciudad |
|----|--------|----------|-------|
| 1  | Ana    | Calle A   | Ciudad X |
| 2  | Juan   | Calle B   | Ciudad Y |
| 3  | María  | Calle C   | Ciudad Z |

Tabla transacciones:

| id | usuario_id | monto | tipo | fecha       |
|----|------------|-------|------|-------------|
| 101| 2          | 50.00 | V    | 2023-06-01 |
| 102| 1          | 75.00 | D    | 2023-06-02 |
| 103| 3          | 30.00 | V    | 2023-06-03 |

En este ejemplo, transacciones contiene el monto y la fecha de cada transacción junto con un identificador que hace referencia al usuario (usuario_id). La tabla usuarios, por otro lado, guarda información sobre los usuarios.

Para obtener una lista completa de las transacciones realizadas por cada usuario y sus detalles correspondientes, necesitamos relacionar estas tablas usando el campo usuario_id.

Consulta utilizando JOIN

Se puede realizar esta tarea con un INNER JOIN:

SELECT u.nombre, t.monto, t.tipo, t.fecha 
FROM usuarios u
JOIN transacciones t ON u.id = t.usuario_id;

Este conjunto de consultas nos devolverá los nombres de los usuarios junto con la información de las transacciones que han realizado.

Errores típicos / trampas

  1. Clave foránea incorrecta: Un error común es usar una clave foránea que no existe en la tabla correspondiente.
   SELECT u.nombre, t.monto 
   FROM usuarios u
   JOIN transacciones t ON u.id = t.usuario_id2;  -- Clave foránea inexistente 'usuario_id2'
  1. JOIN incorrecto: Usar el LEFT JOIN en lugar de INNER JOIN o viceversa.
   SELECT u.nombre, t.monto 
   FROM usuarios u
   LEFT JOIN transacciones t ON u.id = t.usuario_id;  -- Usando LEFT JOIN, pero deberíamos usar INNER JOIN para este caso
  1. Ambigüedad en los campos: Si hay campos con el mismo nombre en ambas tablas sin alias, SQL puede interpretarlos de manera incorrecta.
   SELECT u.nombre, t.monto 
   FROM usuarios u
   JOIN transacciones t ON u.id = t.id;  -- Nombre y monto pueden ser los mismos en ambas tablas

Checklist accionable

  1. Verifica las claves foráneas: Asegúrate de que todas las referencias existen en la tabla correspondiente.
  2. Valida el JOIN correcto: Determina si necesitas un INNER JOIN, LEFT JOIN o RIGHT JOIN.
  3. Agrega aliases a campos comunes: Usa alias para evitar ambigüedades.
  4. Realiza pruebas con conjuntos de datos pequeños: Antes de ejecutar consultas en datasets grandes, prueba con subconjuntos más pequeños.
  5. Documenta tu consulta: Anota los joins utilizados y las claves foráneas involucradas para futuras referencias.

Cierre: Siguientes pasos

  • Explora cómo usar FULL JOIN o CROSS JOIN para situaciones particulares.
  • Aprende a optimizar consultas con índices en las claves foráneas.
  • Practica con conjuntos de datos más grandes y complejos.

Siguiendo estos pasos, podrás manejar eficazmente la relación entre tablas en tu análisis de datos.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).