seegongsik
Datos

Qué es un join en SQL

Una tabla de pedidos anota quién compró qué, pero el «quién» es solo un número de cliente. El nombre que corresponde a ese número está en otra tabla, la de clientes. ¿Cómo averiguas, entonces, el nombre de la persona que hizo un pedido? Tomas como pista el número de cliente, que aparece en las dos tablas, y emparejas las filas que lo comparten. Enlazar tablas dispersas mediante una columna que tienen en común se llama join.

01

La información está repartida en dos tablas

En la lección anterior usamos SQL para sacar de una sola tabla las filas que queríamos. Pero en una base de datos real, la información que necesitas rara vez está toda en la misma tabla. Una tienda anota los pedidos en una tabla de pedidos, y los nombres y datos de contacto de sus clientes, aparte, en una tabla de clientes.
La separación es a propósito. Si en cada pedido se volvieran a escribir el nombre y el teléfono del cliente, los mismos datos se acumularían una y otra vez, y un cambio de teléfono obligaría a buscar y corregir cada una de esas filas. Primero, abramos las dos tablas una al lado de la otra.

toca para abrir
toca para abrir
Toca el encabezado de una tabla para abrirla

Toca el encabezado de cada tabla para abrirla. Verás que la tabla de pedidos y la de clientes guardan columnas distintas.

Una vez abiertas, se ve que cada tabla cumple una función distinta. La de pedidos tiene un número de pedido, un número de cliente y un artículo; la de clientes tiene un número de cliente y un nombre. Con la tabla de pedidos sola, de quien compró el lápiz solo sabes un número.
Una pregunta como «¿Cómo se llama la persona que compró el lápiz?» cruza tablas: el artículo está en una y el nombre en la otra, así que solo hay respuesta si las enlazas. Primero, busquemos la pista que las conecta.

02

Busca la columna que comparten las dos tablas

Si pones lado a lado los nombres de las columnas de ambas tablas, hay una que aparece en las dos: el número de cliente. En la tabla de clientes, cada cliente tiene un número propio que nadie más tiene, así que basta con saber el número para saber de qué cliente se trata.
El número de cliente de la tabla de pedidos es ese mismo número copiado tal cual. Por eso, el número de cliente de la tabla de clientes se llama clave primaria, y el de la tabla de pedidos, que apunta a él, clave foránea. Esta columna compartida es el puente entre las dos tablas.

tabla de pedidostabla de clientes
Elige la columna común que comparten las dos tablas

Toca los nombres de columna uno por uno. Si eliges una columna que está en las dos tablas, se ilumina; si eliges una que está en una sola, te dice en cuál.

El artículo estaba solo en la tabla de pedidos, y el nombre solo en la de clientes. La única columna que está en ambas es el número de cliente.
Cuando los valores de esta columna coinciden, las dos filas se refieren al mismo cliente: el número de cliente 7 de la tabla de pedidos y el número de cliente 7 de la tabla de clientes son la misma persona, Hajun. Así que, con esta columna como guía, puedes emparejar las filas entre sí.

03

Empareja las filas con el mismo número

Emparejar es sencillo. Eliges una fila de la tabla de pedidos, lees su número de cliente y buscas en la tabla de clientes la fila con el mismo número. Si los números coinciden, esas dos filas forman una pareja.
Un cliente puede hacer varios pedidos, y entonces varias filas de la tabla de pedidos apuntan a la misma fila de la tabla de clientes. Abajo, toca el pedido del lápiz y luego el de la goma: los dos llevan al mismo cliente. Un cliente con muchos pedidos: esta relación se llama uno a muchos.

tabla de pedidos
tabla de clientes
3|Minseo
7|Hajun
Toca una fila de pedido para hallar su pareja

Toca una fila de la tabla de pedidos. Se ilumina la fila de clientes con el mismo número de cliente, y debajo aparece de quién es ese pedido.

Los pedidos que solo mostraban un número ahora vienen con un nombre. Los pedidos del lápiz y de la goma llevan los dos a Hajun, y el del cuaderno, a Minseo.
Una base de datos repite esto con cada fila. Una clave primaria suele recibir un índice de forma automática, así que, aunque las tablas sean grandes, la base de datos encuentra rápido la pareja en la tabla de clientes. Entonces, ¿qué tabla se obtiene al juntar cada pareja en una sola fila?

04

Junta las parejas en una sola tabla

Si pones dos filas emparejadas una al lado de la otra, obtienes una fila nueva y más ancha: las celdas del pedido y, junto a ellas, las de ese cliente, con el número de cliente, que estaba en las dos tablas, una sola vez. Reúne esas filas y tendrás una tabla de resultado en la que qué se compró y quién lo compró están en la misma fila.
En SQL, se escribe JOIN entre los nombres de las dos tablas y se indica con ON qué columnas deben tener el mismo valor. El SELECT y el WHERE de la lección anterior se pueden usar junto con él, igual que antes.

n.º cliente
artículo
7
lápiz
3
cuaderno
7
goma
n.º cliente
nombre
7
Hajun
3
Minseo
7
Hajun
Toca combinar para enlazar las dos tablas en una

Toca el botón de combinar. Las dos tablas se unen fila a fila por el número de cliente, y qué se compró y quién lo compró quedan en una sola tabla. Vuelve a tocar para separarlas otra vez.

En la tabla de resultado, el nombre de Hajun aparece dos veces. Aun así, la tabla de clientes sigue guardando a Hajun en una sola fila. La repetición solo existe en una tabla de resultado armada un momento para responder una pregunta; las tablas guardadas siguen igual.
Ten en cuenta también que las filas sin pareja quedan fuera. Si en la tabla de clientes hay alguien que nunca hizo un pedido, no hay pedido con el cual emparejarlo, así que ese cliente no aparece en el resultado de un join básico. Para conservar también las filas sin pareja existe otro tipo de join.

05

Resumen

En resumen: una base de datos reparte la información en varias tablas para no escribir nunca los mismos datos más de una vez. Para responder una pregunta que cruza tablas, buscas una columna que compartan las dos, emparejas las filas cuyos valores en esa columna coinciden y pones cada pareja una al lado de la otra.
Así obtienes una tabla de resultado que se lee como una sola. Guardar por separado y enlazar al preguntar: eso es un join.

Toca los puntos clave en orden para repasar

Toca los puntos clave en orden para repasar. (dos tablas → busca la columna común → empareja filas por la columna común → júntalas en una tabla)

Ahora puedes preguntar a través de tablas dispersas enlazándolas por una columna compartida; es decir, separar los datos en tablas no te impide obtener respuestas.
Entonces, ¿con qué criterio hay que separar las tablas? ¿Qué problema trae escribir el nombre del cliente en cada pedido, y cómo se quita la información repetida? De eso trata la próxima lección, sobre la normalización.

En una líneaUna base de datos reparte la información en varias tablas para no escribir nunca los mismos datos más de una vez. Los pedidos están en una tabla de pedidos y los nombres de los clientes en una tabla de clientes, así que una pregunta como «¿Cómo se llama la persona que hizo este pedido?» no se puede responder con una sola tabla. En ese caso, buscas una columna que compartan las dos. El número de cliente, que cada cliente tiene propio en la tabla de clientes, también está escrito en la tabla de pedidos; si emparejas las filas cuyos valores en esa columna coinciden y las pones lado a lado, obtienes una tabla de resultado que se lee como una sola. Las filas sin pareja quedan fuera del resultado de un join básico. Enlazar tablas dispersas emparejando filas por una columna compartida: eso es un join.
← Datos
¿Te fue útil? Apoyar seegongsik