Joins En SQL: Un Breve Ejemplo | Entender El Por Qué Y El Cómo De Los Joins En SQL

Tony Yiu
May 18, 2020




Esta entrada en el blog fue originalmente destinada a ser una nota complementaria a mi entrada de Pandas Join vs. Merge. Pero resultó ser lo suficientemente larga como para justificar su propio post (y demasiado verborreica para ser una nota complementaria). No pretende ser un manual completo sobre Joins en SQL, sino más bien un ejemplo para ayudar a aquellos que son nuevos en SQL y en bases de datos relacionales a entender lo que significa unir dos tablas.

¿Por qué unimos?

¿Por qué molestarse en unir? ¿No podemos simplemente volcar todo en una hoja de cálculo y ordenar las cosas allí? Tal vez... pero sería increíblemente lento, tedioso y propenso a errores.

Las bases de datos relacionales están diseñadas para ser unidas. Cada tabla de la base de datos contiene datos de una forma o función específica. Por ejemplo, una tabla podría tener datos básicos sobre los clientes de una compañía como el ID del cliente (un ID único que puede ser usado para identificar a cada cliente), nombre, edad, sexo, fecha de la primera compra y dirección. Mientras que una tabla separada mucho más grande almacena datos detallados a nivel de transacción - ID de transacción, fecha de transacción, ID de cliente, categoría de producto, ID de producto, unidades vendidas y precio.

Un cliente determinado (o ID de cliente) podría tener cientos o incluso miles de transacciones, por lo que sería extremadamente redundante almacenar la información básica de ese cliente una y otra vez para cada fila de la tabla de transacciones. La tabla de transacciones debería ser sólo para datos relevantes para las transacciones. Tener demasiados datos superpuestos entre los cuadros es un despilfarro y puede afectar negativamente al rendimiento del sistema.

Pero eso no significa que no nos preocupemos por los vínculos entre las tablas. Dada la especificidad de cada tabla, los análisis que sólo implican una unica tabla no suelen ser útiles. Los análisis interesantes provienen de conjuntos de datos que combinan múltiples tablas. Por ejemplo, podríamos querer segmentar las transacciones por edad o geografía. Para ello, necesitaríamos datos de ambas tablas. Y ahí es donde entra en juego el join 

¿Cómo unimos?
Cuando unimos dos tablas, las unimos mediante una característica seleccionada. Digamos que tenemos dos tablas. La primera, Empleado, lista el número de identificación único de un empleado, su nombre y cargo. La segunda, Venta, lista los datos de quién hizo qué venta adjuntando el número de identificación del empleado y las unidades vendidas a un número de venta único:

SELECT * FROM Employee
SELECT * FROM Sale


Nuestras 2 tablas Empleado (izquierda) y Venta (derecha). (Omití los subrayados de los nombres de las columnas en mis gráficos para su legibilidad)

Ahora unamos las dos tablas. Para unir las dos tablas, necesitamos elegir una columna (o combinación de columnas) que sirva como punto de intersección - llamemos a la columna elegida el índice de unión. Las entradas de la tabla que comparten el mismo valor para el índice de unión se unen entre sí. Tenga en cuenta que la intersección no tiene que ser uno a uno. Por ejemplo, Tony ha hecho 2 ventas, así que al unirse a las tablas, ambas ventas estarán vinculadas a Tony (también conocido como Employee ID 1).

Cuando unimos las tablas, generalmente queremos que el índice de unión sea único. Si el índice de unión no fuera único, podrían ocurrir cosas extrañas. Por ejemplo, digamos que tenemos un segundo empleado llamado Tony (ejemplo en las tablas de abajo), y que es un vendedor mega estrella. Si en lugar de unirnos en "ID de empleado" unimos en "Nombre", entonces vincularíamos erróneamente las ventas de Tony la Megaestrella a mí, haciendo que mi bonificación sea demasiado alta:

No se recomienda unir en columnas no únicas

Y Tony la Megaestrella también obtendría crédito por mis lamentables ventas (no es que lo necesite). Así que para evitar esto, unimos en una columna con valores únicos como "Employee ID" (eliminé a Tony la Megaestrella ya que sólo estaba allí para ilustrar lo que no se debía hacer, y sus increíbles éxitos me hicieron sentir indigno):

La columna "Employee ID" proporciona el enlace entre las 2 tablas

Hay varios tipos de uniones SQL y no voy a entrar en los detalles de todos ellos aquí. En este ejemplo, usaremos un Left Join (unión izquierda), lo que significa que priorizamos las filas de la tabla de la izquierda. Así que nuestra salida incluirá cada fila de la tabla izquierda (la que tiene "Nombre" y "Título") independientemente de si hay una coincidencia con la tabla derecha - por lo tanto, los empleados que no han hecho una venta seguirán apareciendo en una fila de nuestro resultado, pero no habrá valores (NULLs para ser exactos) para las columnas "Número de venta" y "Unidades vendidas".
Echemos un vistazo a nuestro resultado (estamos seleccionando sólo "Número de Venta" y "Unidades Vendidas" de la tabla de la derecha y clasificando por "ID del Empleado"):

SELECT e.*, s.Sale_Number, s.Units_Sold
FROM Employee as e
   LEFT JOIN Sale as s ON e.Employee_ID=s.Employee_ID
ORDER BY e.Employee_ID

Resultado de nuestra unión a la izquierda

La salida de nuestra unión ahora incluye datos de ambas tablas. Los datos de ventas de Tony han sido vinculados sus datos de (gracias al Employee ID) al igual que los de Lisa. 

Fijemonos en dos cosas:
  1. Parece un poco repetitivo porque "ID de empleado", "Nombre" y "Título" se repiten tantas veces como el empleado tenga ventas. En realidad, no nos detendremos aquí. A continuación, lo más probable es que hagamos un group by para contar cuántas ventas hizo cada vendedor o calcular el promedio de unidades vendidas cada vez que el vendedor hizo una venta

  1. El ID del empleado 3 no está en la salida porque hicimos una unión a la izquierda y no había ninguna entrada para el ID del empleado 3 en la tabla de la izquierda. Por lo tanto, se omitió.

Asi  concluye nuestro breve ejemplo. Con suerte, esto te da una idea rudimentaria de por qué necesitamos las uniones y cómo funcionan.


Puntos importantes
  • Las tablas de la base de datos generalmente contienen información muy específica. Por lo tanto, los análisis significativos suelen combinar datos de múltiples tablas.
  • Esto se logra a través de la operación de unión, que combina dos tablas haciéndolas coincidir en base a una columna específica.
  • La columna utilizada para combinar las tablas debe contener sólo valores únicos.
  • Existen varios tipos de uniones. La de este ejemplo es una unión a la izquierda, que devuelve cada fila de la tabla de la izquierda, haya o no coincidencia.


“Joins En SQL: Un Breve Ejemplo | Entender El Por Qué Y El Cómo De Los Joins En SQL”
– Tony Yiu twitter social icon Tweet


Compartir este artículo:

0 Comentarios

Crear un comentario
Ingresar para Comentar

Artículos Relacionados

Nov 25, 2021

5 Consejos para Superar Una Entrevista de Trabajo para una Vacante de Científico de Datos

5 Tips To Ace Your Job Interview For A Data Scientist Opening.PNG 795.94 KBImage SourceLos aspirantes a científicos de datos tienen un futuro brill...

Daniel Morales
Por Daniel Morales
Nov 12, 2021

¿Cuándo Es Mejor Evitar el Uso de Deep Learning?

IntroducciónEste artículo está dirigido a los científicos de datos que pueden considerar el uso de algoritmos de aprendizaje profundo, y quieren sa...

Matt Przybyla
Por Matt Przybyla
Oct 16, 2021

6 Conceptos de Estadística Avanzada en Data Science

El artículo contiene algunos de los conceptos estadísticos avanzados más utilizados junto con su implementación en Python.En mis artículos anterior...

Nagesh Singh Chauhan
Por Nagesh Singh Chauhan
Icon

Únete a nuestra comunidad privada en Slack

Manténgase al día participando de ésta gran comunidad de data scientists en latinoamérica. Hablamos sobre competiciones en data science, cómo estamos resolviendo los retos, modelos de machine learning aplicados a las competiciones, técnicas novedosas y mucho más!

 
Te enviaremos el link de invitación a tu email de forma inmediata.
arrow-up icon