Clase 06 · 22 minGratis
JOIN: cruzar información de varias tablas
Clase 6 del curso gratis SQL desde Cero: qué es un join, en qué se diferencian INNER, LEFT, RIGHT y FULL JOIN, y cómo se escriben sobre una tabla de clientes y otra de pedidos.
Toca cualquier marca ▸ 0:00 de los apuntes y el video salta a ese momento. Abrir en YouTube
La idea: cruzar listas que comparten algo
Tres listas, quizá administradas por tres áreas que ni se conocen: edades, salarios y deudas. ¿Qué edad tiene la persona que no debe nada? Buscas en la lista de deudas quién tiene cero (Viviana) y con ese nombre vas a la de edades . Eso es un join: enriquecer información cruzando tablas a través de una columna en común .
Los cuatro tipos
Imagina dos listas de casas: las que tienen algo azul (A) y las que tienen algo verde (B).
- INNER JOIN — solo lo que está en las dos: casas azules y verdes .
- LEFT JOIN — todo A, y de B lo que coincida: todas las casas con azul, tengan o no verde .
- RIGHT JOIN — el espejo: todo B, y de A lo que coincida .
- FULL JOIN — todo de las dos, coincida o no . Es el que menos vas a usar.
Las tablas de práctica
Cuatro clientes y tres pedidos. ClienteID en pedidos es la llave foránea
que dice quién hizo cada pedido: los dos primeros son de Juan Pérez y el
tercero de Ana Gómez . Luis y María nunca han comprado.
INNER JOIN
Se parte de una tabla, se une con la otra y, con ON, se dice qué columna
tienen en común :
Salen tres filas: solo los clientes que tienen pedido, con las columnas de las
dos tablas juntas . En muchos motores puedes escribir
solo JOIN: es un INNER JOIN .
Elegir columnas y resolver ambigüedades
Cuando una columna existe en las dos tablas (aquí, ClienteID), hay que
decir de cuál la quieres con tabla.columna; si no, SQL responde que es
ambigua . Con alias cortos la consulta queda más
limpia:
Un join puede encadenar tres, cuatro o más tablas .
LEFT JOIN
Ahora están los cuatro clientes. Luis y María aparecen con las columnas de
pedidos en NULL: existen, pero no han comprado
. Es la forma de enriquecer una tabla sin perder
registros.
RIGHT JOIN
La base ahora es pedidos, y todos los pedidos tienen cliente, así que no hay
vacíos. Un RIGHT JOIN es un LEFT JOIN con las tablas al revés: la que va
primero es «la izquierda» .
FULL JOIN
Todo, coincida o no. Con tablas grandes el resultado puede crecer mucho .
RIGHT JOINyFULL JOINllegaron a SQLite en 2022 (versión 3.39). En un SQLite viejo, o en MySQL, que no tieneFULL JOIN, se reemplazan conLEFT JOINyUNION.
Retos de esta clase
1. El nombre de los clientes que nunca han hecho un pedido.
2. Para cada cliente que haya comprado, su nombre, su ciudad y el total gastado.
3. Los cuatro clientes con su número de pedidos, incluidos los que tienen cero. Dos columnas: nombre y pedidos.
