Lección 7: Joins | Curso SQL

Lección 7: Joins

Los Joins nos permiten realizar consultas cuyo resultado puede estar formado por columnas de diferentes tablas. Esto es posible porque las tablas albergan una clave foránea, están relacionadas de alguna manera. De este modo podemos realizar consultas con datos de ambas tablas. No obstante esta utilidad hay que usarla con precaución ya que consume muchos recursos.

Para la lección he creado una base de datos minimalista con fruta y colores.

Tablas de frutas

Puedes descargarla aquí.

INNER JOIN

El más conocido y utilizado. Une los valores que coinciden en ambas tablas si hay relación. En caso contrario omite la fila.

SELECT [tabla.columnas] FROM [tabla_1] INNER JOIN [tabla_2] ON [tabla_1.columna] = [tabla_2.columna];
SELECT * FROM Frutas INNER JOIN Colores ON Frutas.ColorId = Colores.ColorId;
FrutaId | Nombre | ColorId | ColorIColorId | Nombre
1	Melocotón	3	3	Naranja
2	Kiwi	4	4	Verde
3	Coco	5	5	Marrón

Para simplificar el resultado daremos algunos alias.

SELECT Frutas.Nombre AS Nombre, Colores.Nombre AS Color FROM Frutas INNER JOIN Colores ON Frutas.ColorId = Colores.ColorId;
Fruta | Color 
Melocotón	Naranja
Kiwi	Verde
Coco	Marrón

Mucho mejor, ¿no? Ahora te deberías estar preguntando: ¿Donde esta el Higo y la Manzana?. INNER JOIN es un solterón empedernido, ignora las relaciones que no van a ningún lado o las filas nulas.

LEFT JOIN

Une los valores de la primera tabla con la segunda, aunque encuentre relaciones rotas o Nulas. Básicamente no omite ninguna fila de la primera tabla.

SELECT [tabla.columnas] FROM [tabla_1] LEFT JOIN [tabla_2] ON [tabla_1.columna] = [tabla_2.columna];
SELECT Frutas.Nombre AS Nombre, Colores.Nombre AS Color FROM Frutas LEFT JOIN Colores ON Frutas.ColorId = Colores.ColorId;
Fruta | Color 
Melocotón	Naranja
Kiwi	Verde
Coco	Marrón
Higo	NULL
Manzana	NULL

RIGHT JOIN

Mismo mecanismo del anterior pero invertido. Une los valores de la segunda tabla con la primera. En este caso no omite filas de la segunda tabla.

SELECT [tabla.columnas] FROM [tabla_1] RIGHT JOIN [tabla_2] ON [tabla_1.columna] = [tabla_2.columna];

Lamentablemente SQLite no es compatible con RIGHT JOIN, por lo que no podremos visualizar un resultado real. Aunque conseguiremos el mismo efecto con LEFT JOIN y la tabla contraria.

SELECT Frutas.Nombre AS Nombre, Colores.Nombre AS Color FROM Frutas LEFT JOIN Colores ON Frutas.ColorId = Colores.ColorId;
Fruta | Color 
Melocotón	Naranja
Kiwi	Verde
Coco	Marrón
Higo	NULL
Manzana	NULL

FULL JOIN

No ignora ninguna fila, ni de la primera tabla ni de la segunda.

SELECT [tabla.columnas] FROM [tabla_1] FULL JOIN [tabla_2] ON [tabla_1.columna] = [tabla_2.columna];

Lamentablemente SQLite no es compatible con FULL JOIN, por lo que no podremos ver su resultado.

SQL UNION

Combina los valores de diferentes consultas en una sola columna o varias. Además suprime las repeticiones.

SELECT [tabla.columnas] FROM [tabla_1]
UNION
SELECT [tabla.columnas] FROM [tabla_2];

Es necesario que las columnas a mezclar se denominen con el mismo alias o nombre.

SELECT Frutas.nombre FROM Frutas
UNION
SELECT Colores.nombre FROM Colores
Nombre

Amarillo
Coco
Higo
Kiwi
Manzana
Marrón
Melocotón
Naranja
Rojo
Verde

En caso de necesitar que muestres los datos en crudo, sin eliminar las repeticiones, utiliza UNION ALL.

SELECT [tabla.columnas] FROM [tabla_1]
UNION ALL
SELECT [tabla.columnas] FROM [tabla_2];
SELECT Frutas.nombre FROM Frutas
UNION ALL
SELECT Colores.nombre FROM Colores

7-1

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

¿Me invitas a un café? ☕

Puedes hacerlo usando el terminal.

ssh customer@andros.dev -p 5555

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario