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

Explicación de SQL JOINs: 5 Ejemplos claros de INNER JOIN SQL para principiantes

¿Busca una explicación clara de las uniones en SQL? Eche un vistazo a estos cinco ejemplos de INNER JOIN en SQL.

En SQL, INNER JOINpuede ser un poco difícil de dominar para los principiantes. Pero una vez que empieces a trabajar con ellos, aprenderás que son muy útiles. Vamos a discutir cinco ejemplos de SQL INNER JOINs. Pero primero, hagamos un rápido repaso de por qué los JOINs son importantes.

En las bases de datos relacionales, los datos se organizan y almacenan dentro de tablas. Cada tabla representa un tipo específico de información. Pero, a menudo, es necesario analizar datos de diferentes tablas simultáneamente. Y aquí es donde entran en juego los JOINs.

Le animamos a que practique la unión de tablas siguiendo nuestro curso interactivo Tipos de JOIN en SQL interactivo. Incluye 93 ejercicios que cubren los siguientes temas

  • Tipos de JOIN de SQL.
  • Uniones múltiples.
  • Autouniones, es decir, unir una tabla consigo misma.
  • Uniones no equitativas.

Entonces, ¿está listo para ver algunos ejemplos de INNER JOIN? Empecemos.

Uniendo Tablas: Introducción a las operaciones JOIN de SQL

Tipos de JOIN en SQL combinan datos de dos o más tablas basándose en valores de columnas coincidentes. Por ejemplo, puede unir la información de los clientes con los pedidos que realizaron o vincular cada producto con sus proveedores.

Tipos de JOIN en SQL le permiten unir datos de diferentes tablas y extraer información significativa para su caso de uso específico. Consulte esta hoja informativa sobre JOIN en SQL para obtener una visión general de los distintos tipos de JOIN.

Un INNER JOIN en SQL combina filas de varias tablas haciendo coincidir sus valores de columna comunes. Cuando aplique un INNER JOIN para vincular datos de clientes con sus pedidos correspondientes, verá una lista de clientes que han realizado al menos un pedido.

SQL INNER JOIN Ejemplos para Principiantes

Además de INNER JOIN, SQL también proporciona otros tipos de uniones: LEFT JOIN RIGHT JOIN y FULL JOIN. Estas uniones se denominan OUTER JOINs. A diferencia de INNER JOIN, una operación OUTER JOIN puede listar filas de ambas tablas, incluso si no hay ninguna coincidencia.

SQL INNER JOIN Ejemplos para Principiantes

Veamos un ejemplo para comprender mejor la naturaleza de SQL INNER JOINs.

Esta es la tabla customers que almacena la información de los clientes:

customer_idfirst_namelast_nameemail
1CoryCastillocc@email.com
2ElliePottsep@email.com
3JackGreerjg@email.com

Y aquí está la tabla orders tabla que almacena todos los pedidos realizados por los clientes:

order_idcustomer_idorder_dateorder_amount
2716/6/2023100.00
2827/7/2023150.00
2918/8/202320.00

La columna común (mostrada en rosa) en la que se basan los customers y orders es la columna customer_id.

Ahora, aquí está la consulta:

SELECT 
  c.customer_id, 
  c.email, 
  o.order_date, 
  o.order_amount
FROM customers AS c
INNER JOIN orders AS o
ON c.customer_id = o.customer_id;

Esta consulta une la tabla customers (alias AS c) y la tabla orders (con el alias AS o). Estos alias de tablas proporcionan una forma clara de informar a la base de datos de la tabla de origen de cada columna (utilizando la sintaxis table_alias.column_name).

Estos alias se emplean dentro de la cláusula ON para establecer la columna para unir tablas. También los utilizamos en la sentencia SELECT, donde se seleccionan dos columnas de la tabla clientes (c.customer_id and c.email) y otras dos columnas de la tabla orders (o.order_date and o.order_amount).

He aquí el resultado de la consulta:

customer_idemailorder_dateorder_amount
1cc@email.com6/6/2023100.00
2ep@email.com7/7/2023150.00
1cc@email.com8/8/202320.00

Puede observar que el cliente con el ID 3 no aparece en la tabla resultante. Este cliente en particular aún no ha realizado ningún pedido; por lo tanto, no tiene ningún registro coincidente en la tabla orders tabla.

La palabra clave INNER JOIN es intercambiable con la palabra clave JOIN. En otras palabras, cuando se utiliza JOIN, la base de datos la interpreta como una notación abreviada de INNER JOIN.

Para obtener más información sobre INNER JOINs, consulte nuestro artículo ¿Qué es un Inner Join en SQL?

Ejemplos prácticos de INNER JOIN en SQL

Exploremos algunos ejemplos de SQL INNER JOIN adaptados para principiantes. Antes de pasar a los ejemplos, echa un vistazo a este artículo sobre cómo practicar Tipos de JOIN en SQL.

Ejemplo 1: Vincular Libros con Autores

Tienes dos tablas que almacenan información sobre libros y autores. Une estas tablas para ver la lista de libros junto con sus autores.

Esta es la tabla books tabla:

book_idtitlepublication_yearauthor_id
1Frankenstein181822
2The Time Machine189523
3The Martian201124
42001: A Space Odyssey196825
5Dune196526

La columna book_id identifica unívocamente cada libro. Y la columna author_id asigna un autor a cada libro.

Y aquí está la authors tabla:

author_idauthor_name
22Mary Shelley
23H. G. Wells
24Andy Weir
25Arthur C. Clarke
26Frank Herbert

La columna author_id identifica unívocamente a cada autor. Y la columna author_name almacena los nombres completos de los autores.

Si quieres ver los títulos de los libros y los nombres de sus autores, puedes unir estas tablas basándote en su columna común (la columna author_id en ambas tablas). Sólo tiene que seleccionar title de books y author_name de authors:

SELECT 
  b.title, 
  a.author_name
FROM books AS b
INNER JOIN authors AS a
ON b.author_id = a.author_id;

Esta es la tabla resultante:

titleauthor_name
FrankensteinMary Shelley
The Time MachineH. G. Wells
The MartianAndy Weir
2001: A Space OdysseyArthur C. Clarke
DuneFrank Herbert

Observe que a cada libro se le asigna un autor y a cada autor se le asigna un libro, ya que no hay valores duplicados en la columna común author_id. Examine el siguiente ejemplo para ver qué ocurre si la columna común tiene valores duplicados.

Ejemplo 2: Asignar productos a categorías

Tiene dos tablas que almacenan productos y categorías de productos. Una estas tablas para ver la lista de productos junto con sus categorías.

Esta es la tabla products tabla:

product_idproduct_namecategory_id
1Apple22
2Orange22
3Potato23
4Carrot23
5Chocolate24

La columna product_id identifica unívocamente cada producto. Y la columna category_id asigna una categoría a cada producto.

Y aquí está la categories tabla:

category_idcategory_name
22Fruits
23Vegetables
24Snacks

La columna category_id identifica unívocamente cada categoría. Y la columna category_name almacena los nombres completos de las categorías.

Si quieres ver los productos y sus categorías, puedes unir estas tablas basándote en su columna común, que es la columna category_id. Esta es la consulta:

SELECT 
  p.product_name, 
  c.category_name
FROM products AS p
INNER JOIN categories AS c
ON p.category_id = c.category_id;

Esta es la tabla resultante:

product_namecategory_name
AppleFruits
OrangeFruits
PotatoVegetables
CarrotVegetables
ChocolateSnacks

Las categorías con ID 22 y 23 están asignadas a dos productos cada una; sus nombres aparecen dos veces en la tabla de salida.

Ejemplo 3: Listar médicos y pacientes con el mismo nombre de pila

Tiene dos tablas que almacenan información sobre médicos y pacientes. Una estas tablas para ver la lista de médicos y pacientes que comparten el mismo nombre de pila.

Esta es la tabla doctors tabla:

doctor_idfirst_namelast_name
1SamanthaMonroe
2MelvinFerrell
3AlbieBlake
4RoseBernard
5LouiPeterson

La columna doctor_id identifica de forma exclusiva a cada médico. Las otras dos columnas almacenan los nombres y apellidos de los médicos.

Y aquí está la tabla patients tabla:

patient_idfirst_namelast_name
23BenWoodward
24SamanthaThomson
25KateDonovan
26AlbieVasquez
27LouiChen

La columna patient_id identifica unívocamente a cada paciente. Las otras dos columnas almacenan los nombres y apellidos de los pacientes.

Si desea ver la lista de médicos y pacientes que comparten el mismo nombre, puede unir estas tablas basándose en la columna first_name.

SELECT d.*, p.*
FROM doctors AS d
INNER JOIN patients AS p
ON d.first_name = p.first_name;

Tenga en cuenta que d.* define todas las columnas de la tabla doctors y p.* define todas las columnas de la tabla patients de la tabla.

Ésta es la tabla resultante:

doctor_idfirst_namelast_namepatient_idfirst_namelast_name
1SamanthaMonroe24SamanthaThomson
3AlbieBlake26AlbieVasquez
5LouiPeterson27LouiChen

Gracias a la operación INNER JOIN, puede listar sólo los pares de médicos y pacientes en los que los nombres de pila son iguales.

Ejemplo 4: Emparejar personas con apartamentos adecuados

Tiene dos tablas que almacenan información sobre apartamentos disponibles para alquilar y personas que buscan apartamentos que se ajustan a su rango de precios. Una estas tablas para ver qué apartamentos puede alquilar cada persona.

Esta es la tabla apartments tabla:

apartment_idrent
11000
2700
3500

La columna apartment_id identifica unívocamente cada apartamento. Y la columna rent almacena el importe mensual del alquiler.

Y aquí está la persons tabla:

person_idemailmax_rent
23ab@email.com900
24cd@email.com600
25ef@email.com3000

La columna person_id identifica unívocamente a cada persona que busca un apartamento para alquilar. La columna email almacena sus correos electrónicos y la columna max_rent almacena la cantidad máxima de alquiler mensual que pueden pagar por el apartamento.

Si desea ver qué pisos puede alquilar cada persona, puede unir estas tablas basándose en las columnas rent y max_rent:

SELECT 
  p.person_id, 
  p.email,
  a.apartment_id, 
  a.rent AS apartment_rent
FROM apartments AS a
INNER JOIN persons AS p
ON a.rent < p.max_rent;

Aquí la correspondencia debe hacerse entre la columna de alquiler de la tabla apartments y la columna max_rent de la tabla persons donde rent < max_rent.

Esta es la tabla resultante:

person_idemailapartment_idapartment_rent
25ef@email.com11000
23ab@email.com2700
25ef@email.com2700
23ab@email.com3500
24cd@email.com3500
25ef@email.com3500

Utilizando la cláusula ON con la condición que contiene el signo <, múltiples filas de la tabla apartments se asignaron a varias filas de la tabla persons y viceversa. Y se consiguió ver qué apartamentos son adecuados para alquilar para qué personas.

Ejemplo 5: Unir tablas de continentes, países y ciudades

Esta vez tiene tres tablas que almacenan información sobre continentes, países y ciudades. Une estas tablas para saber qué ciudad pertenece a qué país y qué país pertenece a qué continente.

Esta es la tabla continents que almacena todos los continentes:

continent_idcontinent_name
1Asia
2Africa
3North America
4South America
5Antarctica
6Europe
7Australia

La columna continent_id identifica unívocamente cada continente. Y la columna continent_name almacena su nombre completo.

Esta es la tabla countries tabla que almacena los países seleccionados:

country_idcountry_namecontinent_id
23United States3
24Brazil4
25South Africa2
26Japan1
27Poland6

La columna country_id identifica unívocamente a cada país. La columna country_name almacena su nombre completo. Y la columna continent_id almacena el continente donde se encuentra el país.

Y esta es la tabla cities tabla que almacena las ciudades seleccionadas:

city_idcity_namecountry_id
33Rio de Janeiro24
34New York23
35Tokyo26
36Warsaw27
37Cape Town25

La columna city_id identifica cada ciudad de forma única. La columna city_name almacena su nombre completo. Y la columna country_id almacena el país donde se encuentra la ciudad.

Si quieres ver qué ciudades, países y continentes van juntos, puedes unir estas tres tablas basándote en sus columnas comunes:

SELECT 
  cont.continent_name, 
  coun.country_name, 
  ci.city_name
FROM continents AS cont
INNER JOIN countries AS coun
ON cont.continent_id = coun.continent_id
INNER JOIN cities AS ci
ON coun.country_id = ci.country_id;

La tabla continent se une a la tabla countries por su columna común (continent_id). Y la tabla countries se une a la tabla cities en su columna común (country_id).

Esta es la tabla resultante:

continent_namecountry_namecity_name
AsiaJapanTokyo
AfricaSouth AfricaCape Town
North AmericaUnited StatesNew York
South AmericaBrazilRio de Janeiro
EuropePolandWarsaw

Las tres tablas se unen en sus columnas comunes y la sentencia SELECT lista los nombres de continente, país y ciudad basándose en la unión entre las columnas ID.

Consulta este artículo sobre la unión de tres o más tablas en SQL para ver más ejemplos de uniones multi-tabla.

Su Turno para Practicar Ejemplos de INNER JOIN en SQL

A lo largo de este artículo, hemos profundizado en las complejidades de INNER JOIN en SQL, desde los conceptos básicos hasta escenarios más avanzados. Hemos utilizado varias condiciones de JOIN e incluso hemos unido tres tablas. Como hemos visto, la potencia de INNER JOIN reside en su capacidad para conectar conjuntos de datos sin problemas, lo que nos permite extraer información valiosa.

¿Necesita más ejemplos de SQL INNER JOIN? Pruebe todo tipo de JOINs siguiendo nuestro curso en Tipos de JOIN en SQL que mencionamos anteriormente. Obtendrá toda la práctica que necesita para sentirse cómodo escribiendo JOINs.

¡Buena Suerte!