Learning Report: JOINS en SQL.

Learning Report: JOINS en SQL.


sql joins

¡Volviendo a la carga después del resfriado! 😷

No sé cómo habéis estado esta semana, pero yo he pasado por una buena batalla contra un resfriado (del que aún intento salir). De esos que te dejan un día o dos sin dormir de lo que te duele la garganta, te dejan la nariz tapada y sin ganas de hacer nada más que echarte unos cuantos League of legends (para ponerte peor). Pero bueno, después de un par de tuppers de mi madre y pegárselo a mi pareja… ¡aquí estoy otra vez! Como he estado fuera unos días, hoy vuelvo con un tema bastante práctico, importante y, sobre todo, que me va a servir para afianzar conocimientos en SQL: los JOINS.

¿Qué son los JOINS en SQL?🧩

Imagina que tienes una biblioteca online con tablas que contienen información sobre libros, autores y categorías. Los JOINS te permiten combinar estos datos para tener una vista completa, como qué autor escribió qué libro, o la categoría del libro.

Os voy a mostrar las tablas con las que trabajaré los ejemplos. Son tablas pequeñas de 10 registros y son sintéticas (generadas por un LLM, ya hablaremos de cómo generar datos sintéticos con ChatGPT o cualquier otro).

diagrama de la base de datos de una biblioteca online

Tabla libros

idtituloautor_idcategoria_id
1El Señor de los Anillos11
2Cien Años de Soledad22
3198433
4Harry Potter y la Piedra…41
5El Hobbit11
6Crónica de una Muerte…22
7Un Mundo Feliz33

Tabla autores

idnombre
1J.R.R. Tolkien
2Gabriel García Márquez
3George Orwell
4J.K. Rowling
5Dan Brown

Tabla categorías

idnombre
1Fantasía
2Realismo Mágico
3Distopía
4Misterio
5Filosofía

Tipos de JOINS ¿Cómo combinar los datos?📖


1. INNER JOIN: Solo lo que tienen en común 📑

El INNER JOIN devuelve solo las filas que tienen coincidencia en ambas tablas. Los libros deben tener tanto un autor como una categoría asignada, por lo que los libros sin coincidencia en alguna de las tablas (autor o categoría) no aparecerá en la tabla resultado.

SELECT libros.titulo, autores.nombre AS autor, categorias.nombre AS categoria
FROM libros
INNER JOIN autores
ON libros.autor_id = autores.id
INNER JOIN categorias
ON libros.categoria_id = categorias.id;
tituloautorcategoria
El Señor de los AnillosJ.R.R. TolkienFantasía
Cien Años de SoledadGabriel García MárquezRealismo Mágico
1984George OrwellDistopía
Harry Potter y la Piedra…J.K. RowlingFantasía
El HobbitJ.R.R. TolkienFantasía
Crónica de una Muerte…Gabriel García MárquezRealismo Mágico
Un Mundo FelizGeorge OrwellDistopía

En este ejemplo aparecen solamente libros que tienen coincidencia en ambas tablas (autores y categorías). Los libros con valores NULL en alguno de estos campos, como “Libro Sin Autor” o “Libro Perdido”, no aparecen en los resultados.

2. LEFT JOIN (LEFT OUTER JOIN): Todos los libros, incluso los sin autor o categoría 📚

El LEFT JOIN incluye todos los registros de la tabla de la izquierda (en este caso, libros), y solo las coincidencias con la tabla de la derecha. Si algún libro no tiene autor o categoría aparecerá el famoso NULL en el resultado. Lo que viene siendo un =BUSCARV() en un Excel o Google Sheets.

SELECT libros.titulo, autores.nombre AS autor, categorias.nombre AS categoria
FROM libros
LEFT JOIN autores
ON libros.autor_id = autores.id
LEFT JOIN categorias
ON libros.categoria_id = categorias.id;
tituloautorcategoria
El Señor de los AnillosJ.R.R. TolkienFantasía
Cien Años de SoledadGabriel García MárquezRealismo Mágico
1984George OrwellDistopía
Harry Potter y la Piedra…J.K. RowlingFantasía
El HobbitJ.R.R. TolkienFantasía
Crónica de una Muerte…Gabriel García MárquezRealismo Mágico
Un Mundo FelizGeorge OrwellDistopía
Libro Sin AutorNULLMisterio
Libro Sin CategoríaDan BrownNULL
Libro PerdidoNULLNULL

En este caso, todos los libros están presentes en la tabla de resultado, incluso los que no tienen autor o categoría. Los libros como “Libro Sin Autor”, “Libro Sin Categoría” y “Libro Perdido” aparecen con campos NULL donde no hay coincidencias. Ningún libro queda fuera, a diferencia del INNER JOIN.

3. RIGHT JOIN (RIGHT OUTER JOIN): Todas las castegorías, aunque no tengan libros asignados 📂

El RIGHT JOIN devuelve todas las filas de la tabla de la derecha, y solo las coincidencias en la izquierda. Esto nos permite ver todas las categorías, incluso si no tienen libros asociados.

SELECT libros.titulo, autores.nombre AS autor, categorias.nombre AS categoria
FROM libros
RIGHT JOIN categorias
ON libros.categoria_id = categorias.id
LEFT JOIN autores
ON libros.autor_id = autores.id;
tituloautorcategoria
El Señor de los AnillosJ.R.R. TolkienFantasía
Harry Potter y la Piedra…J.K. RowlingFantasía
El HobbitJ.R.R. TolkienFantasía
Cien Años de SoledadGabriel García MárquezRealismo Mágico
Crónica de una Muerte…Gabriel García MárquezRealismo Mágico
1984George OrwellDistopía
Un Mundo FelizGeorge OrwellDistopía
Libro Sin AutorNULLMisterio
NULLNULLFilosofía

Aquí vemos todas las categorías, incluso aquellas que no tienen libros asignados. En este caso, la categoría “Filosofía” aparece en el resultado, pero con valores NULL para el tíulo y el autor poorque no tiene ningún libro asignado. Tabmién vemos libros como “Libro Sin Autor”, que aparece con NULL en el campo de autor.

4. FULL JOIN: Todos los libros y categorías, aunque no coincidan 🔄

El FULL JOIN devuelve todas las filas de ambas tablas, incluso si no coinciden entre sí. Si no hay coincidencias, los campos aparecerán como NULL.

SELECT libros.titulo, autores.nombre AS autor, categorias.nombre AS categoria
FROM libros
FULL OUTER JOIN categorias
ON libros.categoria_id = categorias.id
LEFT JOIN autores
ON libros.autor_id = autores.id;
tituloautorcategoria
El Señor de los AnillosJ.R.R. TolkienFantasía
Cien Años de SoledadGabriel García MárquezRealismo Mágico
1984George OrwellDistopía
Harry Potter y la Piedra…J.K. RowlingFantasía
El HobbitJ.R.R. TolkienFantasía
Crónica de una Muerte…Gabriel García MárquezRealismo Mágico
Un Mundo FelizGeorge OrwellDistopía
Libro Sin AutorNULLMisterio
Libro Sin CategoríaDan BrownNULL
Libro PerdidoNULLNULL
NULLNULLFilosofía

En el FULL JOIN, vemos todo: tanto los libros como las categorías, aunque no coincidan. Si un libro no tiene autor o categoría… pues aparecere NULL como ya hemos visto anteriormente. Este JOIN muestra todas las filas de ambas tablas, con valores nulos donde no hay coincidencias.

ilustración que tipo de join usar.

Al final los JOINS son una herramienta fundamental cuando trabajas con bases de datos, y dominar cómo combinar las diferentes tablas que tienes… te abre un sinfín de posibilidades para poder buscar patrones y conseguir hacer visualizaciones mucho más completas pero sobre todo más útiles.

meme sobre los joins donde se explican mediante una persona en diferente fases usando su pelo y su barba.