Guía Completa de JOINs SQL

Aprende a combinar datos de múltiples tablas en la base de datos de Red Social

Cómo usar esta guía

Antes de comenzar, ve al simulador en: https://learndb.online/simulador-sql

Selecciona la base de datos "Red Social" para seguir los ejemplos.

¿Qué son los JOINs en SQL?

Los JOINs (uniones) permiten combinar filas de dos o más tablas basadas en una relación columna entre ellas. En una red social, esto es fundamental para conectar usuarios con sus posts, comentarios, likes, etc.

Estructura de nuestra Red Social:

  • usuarios: Información de los usuarios de la red social
  • posts: Publicaciones realizadas por los usuarios
  • comentarios: Comentarios en los posts
  • likes: Reacciones a posts y comentarios
  • seguidores: Relaciones de seguimiento entre usuarios
  • grupos: Comunidades dentro de la red social
  • miembros_grupos: Usuarios que pertenecen a grupos

Tipos de JOINs

INNER JOIN

Devuelve solo los registros que coinciden en ambas tablas.

LEFT JOIN

Devuelve todos los registros de la tabla izquierda y los coincidentes de la derecha.

RIGHT JOIN

Devuelve todos los registros de la tabla derecha y los coincidentes de la izquierda.

FULL OUTER JOIN

Devuelve todos los registros cuando hay coincidencia en alguna tabla.

INNER JOIN Registros Coincidentes en Ambas Tablas

usuarios
posts
=
solo usuarios con posts

Ejercicio 1: Posts con información de usuarios

Muestra todos los posts con el nombre completo del usuario que los creó.

Tips para este ejercicio
Usa INNER JOIN para conectar usuarios con posts
La relación es: usuarios.id = posts.usuario_id
Combina nombre y apellido usando el operador ||

Tabla esperada:

nombre_usuario contenido fecha_publicacion
Carlos Mendoza ¡Hola a todos! Acabo de terminar mi nuevo proyecto en React... 2024-02-01 10:30:00
Sofia Herrera Nuevo tutorial de diseño de interfaces móviles... 2024-02-02 14:15:00
Diego Castillo Captura del amanecer en Santiago desde el Cerro San Cristóbal 2024-02-03 06:45:00

Ejercicio 2: Comentarios con posts y usuarios

Muestra todos los comentarios con el nombre del comentarista y el contenido del post.

Tips para este ejercicio
Necesitarás dos INNER JOINs: comentarios → usuarios y comentarios → posts
Relación 1: comentarios.usuario_id = usuarios.id
Relación 2: comentarios.post_id = posts.id

Tabla esperada:

comentarista comentario contenido_post
Sofia Herrera ¡Se ve genial! ¿Usaste alguna librería de componentes? ¡Hola a todos! Acabo de terminar mi nuevo proyecto en React...
Carlos Mendoza Sí, usé Material-UI para los componentes base ¡Hola a todos! Acabo de terminar mi nuevo proyecto en React...

LEFT JOIN Todos los Registros de la Tabla Izquierda

usuarios
posts
=
todos los usuarios, aunque no tengan posts

Ejercicio 3: Todos los usuarios y sus posts

Muestra todos los usuarios y la cantidad de posts que han creado (incluyendo usuarios con 0 posts).

Tips para este ejercicio
Usa LEFT JOIN para incluir usuarios sin posts
Usa COUNT(p.id) para contar posts (no COUNT(*))
Agrupa por usuario con GROUP BY

Tabla esperada:

nombre_usuario cantidad_posts
Carlos Mendoza 2
Sofia Herrera 1
Diego Castillo 2
Valentina Rojas 1
Andrés Vega 1
María González 1

Ejercicio 4: Grupos y cantidad de miembros

Muestra todos los grupos con la cantidad de miembros (incluyendo grupos sin miembros).

Tips para este ejercicio
Usa LEFT JOIN para incluir grupos vacíos
Relación: grupos.id = miembros_grupos.grupo_id
Filtra solo miembros activos con WHERE mg.activo = 1

Tabla esperada:

nombre_grupo cantidad_miembros privacidad
Desarrolladores Chile 3 publico
Diseño UX/UI 2 publico
Fotografía Urbana 1 publico
Música Independiente 1 privado
Cocina Saludable 2 publico

RIGHT JOIN Todos los Registros de la Tabla Derecha

usuarios
likes
=
todos los likes, aunque no tengan usuario

Ejercicio 5: Posts y sus likes (RIGHT JOIN)

Muestra todos los posts que han recibido likes, usando RIGHT JOIN.

Tips para este ejercicio
Usa RIGHT JOIN empezando desde la tabla likes
Relación: posts.id = likes.post_id
Cuenta likes por post con COUNT(DISTINCT l.id)

Tabla esperada:

contenido_post cantidad_likes
¡Hola a todos! Acabo de terminar mi nuevo proyecto en React... 3
Nuevo tutorial de diseño de interfaces móviles... 2
Captura del amanecer en Santiago desde el Cerro San Cristóbal 2
Rutina de ejercicios para principiantes... 2

FULL OUTER JOIN Todos los Registros de Ambas Tablas

usuarios
mensajes
=
todos los usuarios y todos los mensajes

Ejercicio 6: Usuarios y actividad de mensajes

Muestra todos los usuarios y su actividad de envío/recepción de mensajes.

Tips para este ejercicio
Usa FULL OUTER JOIN para incluir todos los casos
Identifica usuarios con CASE WHEN según su rol en el mensaje
Agrupa por usuario para contar su actividad

Tabla esperada:

nombre_usuario mensajes_enviados mensajes_recibidos actividad_total
Carlos Mendoza 1 1 2
Sofia Herrera 1 0 1
Diego Castillo 1 0 1
Valentina Rojas 0 1 1
Andrés Vega 1 1 2
María González 1 1 2

JOINs Múltiples Combinaciones Complejas

Ejercicio 7: Resumen de actividad por usuario

Muestra un resumen completo de la actividad de cada usuario (posts, comentarios, likes, seguidores).

Tips para este ejercicio
Usa múltiples SUBCONSULTAS con COUNT para cada tipo de actividad
Separa seguidores de seguidos (followers vs following)
Usa COALESCE para mostrar 0 en lugar de NULL

Tabla esperada:

nombre_usuario posts comentarios likes_recibidos seguidores siguiendo
Carlos Mendoza 2 1 3 2 2
Sofia Herrera 1 2 0 2 2
Diego Castillo 2 0 2 2 2

Ejercicio 8: Posts populares y su contexto

Muestra los posts ordenados por popularidad (likes + comentarios) con información del autor.

Tips para este ejercicio
Combina múltiples LEFT JOINs para calcular popularidad
Usa COUNT(DISTINCT) para evitar duplicados
Suma likes y comentarios para el puntaje de popularidad

Tabla esperada:

autor contenido likes comentarios puntaje_popularidad
Carlos Mendoza ¡Hola a todos! Acabo de terminar mi nuevo proyecto en React... 3 3 6
Diego Castillo Captura del amanecer en Santiago desde el Cerro San Cristóbal 2 1 3
Sofia Herrera Nuevo tutorial de diseño de interfaces móviles... 2 1 3

Comparación de Tipos de JOINs

Ejercicio Comparativo: Usuarios y Posts

Veamos cómo diferentes JOINs muestran resultados distintos para la misma relación.

INNER JOIN

usuarios u INNER JOIN posts p ON u.id = p.usuario_id

Resultado: Solo usuarios que han publicado algo
Cantidad: Menos registros (solo coincidencias)

LEFT JOIN

usuarios u LEFT JOIN posts p ON u.id = p.usuario_id

Resultado: Todos los usuarios, incluso sin posts
Cantidad: Todos los usuarios + sus posts

RIGHT JOIN

usuarios u RIGHT JOIN posts p ON u.id = p.usuario_id

Resultado: Todos los posts, incluso sin usuario
Cantidad: Todos los posts + sus usuarios

FULL OUTER JOIN

usuarios u FULL OUTER JOIN posts p ON u.id = p.usuario_id

Resultado: Todo: usuarios sin posts + posts sin usuarios
Cantidad: Máximo de registros posible

¿Cuándo usar cada tipo?

  • INNER JOIN: Cuando solo necesitas datos que existen en ambas tablas
  • LEFT JOIN: Cuando necesitas todos los registros de la tabla principal
  • RIGHT JOIN: Cuando necesitas todos los registros de la tabla secundaria
  • FULL OUTER JOIN: Cuando necesitas datos completos, incluyendo faltantes

¡Felicitaciones! Ya dominas los JOINs

Has aprendido a combinar datos de múltiples tablas usando diferentes tipos de JOINs. Esta habilidad es fundamental para trabajar con bases de datos relacionales complejas.

Practica más

Experimenta con diferentes combinaciones y filtros

Optimiza

Aprende sobre índices y rendimiento de JOINs

Explora

Prueba con las otras bases de datos del simulador