Volver a la lista de artículos Artículos
Lectura de 7 minutos

Cómo unir dos tablas en SQL

Cuando se trabaja con bases de datos relacionales, es normal hacer consultas de datos de varias tablas. No es difícil si se sabe utilizar los operadores SQL específicos para ello. En este artículo, enseñaré cómo usar WHERE y el operador especial JOIN para unir dos tablas, y cómo filtrar filas del conjunto de resultados.

Si quiere hacer prácticas de unir tablas en SQL, eche un vistazo a nuestro curso interactivo Tipos de JOIN en SQL. Contiene más de 90 ejercicios prácticos sobre diferentes tipos de JOIN. También, en nuestro programa de enseñanza Ejercicio de SQL encontrará más cursos prácticos de SQL.

Cómo hacer consultas de una tabla

Primero, voy a dar un rápido repaso a cómo seleccionar datos de una tabla. Tenemos la siguiente tabla, product:

idnameprice
1Smartwatch Erin234.00
2Smartwatch Sun455.00
3Smartband Eli300.00
4Smartband White124.00

Para seleccionar los datos de todas las columnas y filas de esta tabla, se puede utilizar la siguiente consulta:

SELECT id, name, price 
FROM product;

En esta sencilla consulta, los nombres de las columnas de las que se desea obtener datos se escriben después de SELECT. A continuación, está la palabra clave FROM y el nombre de la tabla donde se almacenan los datos.

También se pueden filtrar las filas para obtener solo los registros que coincidan con los criterios indicados. Observe la siguiente expresión de SQL:

SELECT name, price 
FROM product
WHERE price < 250.00;

En este caso, el conjunto de resultados consta de solo dos filas y de las columnas name y price:

nameprice
Smartwatch Erin234.00
Smartband White124.00

Los nombres de las columnas se escriben después de SELECT, y la palabra clave FROM ayuda a especificar la tabla de la que se obtienen los datos. Al final de la consulta, la palabra clave WHERE va seguida de la condición del filtro. En este ejemplo, la condición compara el valor de la columna price con 250,00. La consulta solo devuelve los datos de un producto si su precio es inferior a 250,00.

Cómo usar WHERE para hacer consultas de datos de varias tablas

Las bases de datos relacionales están formadas por múltiples tablas que hacen referencia unas a otras. Las filas de una tabla hacen referencia a filas específicas de otra tabla, y están conectadas a través de alguna columna de ID. A continuación, veremos cómo unir los datos de una tabla con los de otra.

Partimos de las siguientes dos tablas product y category, que pertenecen a una base de datos sobre productos de un almacén:

product

idproduct_namepricecategory_id
1smartwatch235.002
2bricks26.703
3lamp128.002
4sofa3200.001
5desk1350.001
6power strip29.002

category

idcategory_name
1furniture
2electronics
3toys

Supongamos que necesitamos algunos datos de esta base de datos de un almacén, como el nombre de los productos, su precio y sus respectivas categorías. Podemos unir las filas de la tabla product con filas de la tabla category a través de una cláusula WHERE. Observe la siguiente consulta:

SELECT product.product_name, product.price, category.category_name 
FROM product, category 
WHERE product.category_id = category.id ;

Este es el conjunto de resultados de la consulta:

product_namepricecategory_name
smartwatch235.00electronics
bricks26.70toys
lamp128.00electronics
sofa3200.00furniture
desk1350.00furniture
power strip29.00electronics

La expresión SELECT de esta consulta especifica las columnas de ambas tablas: product_name y price, de la tabla product, y category_name, de la tabla category. El nombre de cada columna va precedido del nombre de la tabla correspondiente, y ambos están separados por un punto.

A continuación, después de la palabra clave FROM, se escriben los nombres de las tablas separados por comas.

La última parte de esta consulta es un WHERE, con una condición que especifica cómo unir las filas de ambas tablas. Aquí, los valores de la columna category_id de la tabla product corresponden a los valores de la columna id de la tabla category y, cuando son iguales, las filas se unen. El ID de categoría (category_id) del "smartwatch" de la tabla product es 2. El mismo valor en la columna id de la tabla category corresponde a "electronics", como se muestra en la fila verde de antes.

Si hay columnas con el mismo nombre en ambas tablas, hay que distinguirlas en la sentencia SELECT. Esto se hace escribiendo el nombre de la tabla, seguido de un punto y, luego, el nombre de la columna. Pero, en nuestro ejemplo, las tablas no tienen ningún nombre de columna en común. Por lo que, en la expresión SELECT podemos utilizar solo los nombres de las columnas, sin especificar de qué tablas provienen, como en la consulta que se muestra a continuación:

SELECT product_name, price, category_name 
FROM product, category 
WHERE product.category_id = category.id ;

WHERE se usa para hacer consultas de datos de varias tablas. Es un estándar antiguo de SQL que, aunque todavía está disponible, ya no se utiliza con frecuencia. En la siguiente sección, veremos otro método.

Cómo hacer consultas de datos de varias tablas con JOIN

Hoy en día, el método más habitual para unir datos de múltiples tablas es usando el operador especial JOIN, también conocido como INNER JOIN. Para ver cómo funciona, utilizaremos las mismas dos tablas de la base de datos del almacén, que vuelvo a mostrar a continuación.

product

idnamepricecategory_id
1smart watch235.002
2bricks26.703
3lamp128.002
4sofa3200.001
5desk1350.001
6power strip29.002

category

idname
1furniture
2electronics
3toys

Veamos la siguiente consulta, que asigna la categoría de la tabla category a los nombres de los productos de la tabla product.

SELECT
  product.name AS product_name,
  category.name AS category_name
FROM product
JOIN category ON product.category_id=category.id;

La unión se realiza con el operador JOIN. En la cláusula FROM, el nombre de la primera tabla (product) va seguido de la palabra clave JOIN y, luego, del nombre de la segunda tabla (category). A continuación, se añade la palabra clave ON y la condición para unir las filas de las distintas tablas. El nombre de la categoría se asigna en función de la columna id de la tabla category, que equivale a la columna category_id de la tabla product (product.category_id=category.id).

Este es el conjunto de resultados de la consulta anterior:

product_namecategory_name
smart watchelectronics
brickstoys
lampelectronics
sofafurniture
deskfurniture
power stripelectronics

El valor de category_id del "smart watch" es 2. En la columna id de la tabla category, el valor 2 está asociado a "electronics", por lo que "smart watch" se asigna a "electronics".

Usar el operador JOIN es el método más habitual para unir varias tablas de una base de datos. En el artículo "Una guía ilustrada del INNER JOIN de SQL", hablo más sobre este operador. El artículo "Explicación sencilla del INNER JOIN de SQL" también entra en más detalle en este tema. Como se mencionó anteriormente, el operador INNER JOIN es equivalente a JOIN, y ambos se pueden usar indistintamente.

Cómo usar JOIN y WHERE para seleccionar datos de tablas

El uso de los operadores JOIN para recuperar datos de varias tablas también permite filtrar más fácilmente el conjunto de resultados. Observe la siguiente consulta, que es una variante de la anterior y se basa en los mismos datos:

SELECT
  product.name AS product_name,
  category.name AS category_name
FROM product
JOIN category ON product.category_id=category.id
WHERE category.name != ’toys’;

Este es el resultado de la consulta:

product_namecategory_name
smart watchelectronics
lampelectronics
sofafurniture
deskfurniture
power stripelectronics

La primera parte de esta consulta es igual que en la anterior. Sin embargo, en esta se excluyen los productos de la categoría "toys". Filtramos las filas del conjunto de resultados con una cláusula WHERE, que comprueba si la categoría es distinta de "toys" (category.name != ’toys’).

Si quiere realizar más ejercicios prácticos de JOIN en SQL, le invito a que consulte nuestro curso práctico Tipos de JOIN en SQL, lea el artículo "Cómo practicar con los tipos de JOIN de SQL" o vea el video "Conceptos básicos de los JOIN de SQL" de la serie "Aprendemos SQL".

También existen otros operadores JOIN. Además de JOIN o INNER JOIN, existen los operadores LEFT JOIN, RIGHT JOIN y FULL JOIN. En "Tipos de JOIN en SQL para principiantes" puede leer más sobre ellos. Si quiere ver más ejercicios de SQL, consulte nuestro programa de enseñanza Ejercicio de SQL.

Cómo unir tablas en SQL

Hemos visto cómo podemos unir varias tablas de una base de datos relacional que están referenciadas entre sí, para obtener todos los datos de objetos. Esto se puede hacer, usando WHERE o JOIN. Para saber más sobre las diferencias entre estos métodos, recomiendo un artículo muy interesante, "¿Cuál es la diferencia entre unir varias tablas con FROM y con JOIN?".

Aquí solo mostré un poco de este tema, así que, ¡siga aprendiendo!