Resumen: en este tutorial, aprenderá a consultar datos de varias tablas mediante la instrucción SQL INNER JOIN.
En el tutorial anterior, aprendió cómo consultar datos de una sola tabla usando la instrucción SELECT. Sin embargo, a menudo desea consultar datos de varias tablas para tener un conjunto de resultados completo para el análisis. Para consultar datos de varias tablas, utilice declaraciones de combinación.
SQL proporciona varios tipos de combinaciones, como combinación interna, combinación externa (combinación externa izquierda o combinación izquierda, combinación externa derecha o combinación derecha y combinación externa completa ) y autounión. En este tutorial, le mostraremos cómo usar la cláusula INNER JOIN
.
Sintaxis SQL INNER JOIN
Lo siguiente ilustra INNER JOIN
sintaxis para unir dos tablas:
1
2
3
4
5
|
SELECT
columna1, columna2
DE
tabla_1
INNER JOIN table_2 ON join_condition;
|
Examinemos la sintaxis anterior con mayor detalle:
- Las
table_1
ytable_2
se denominan tablas unidas. - Para cada fila en el
table_1
, la consulta busca la fila correspondiente en eltable_2
que cumple la condición de unión. Si se encuentra la fila correspondiente, la consulta devuelve una fila que contiene datos de ambas tablas. De lo contrario, examina la siguiente fila entable_1
, y este proceso continúa hasta que se examinan todas las filas entable_1
.
Para unir más de dos tablas, se aplicó la misma lógica.
Ejemplos de SQL INNER JOIN
SQL INNER JOIN – ejemplo de consulta de datos de dos tablas
En este ejemplo, usaremos las tablas products
y categories
en la base de datos de muestra. La siguiente imagen ilustra el diagrama de la base de datos.
En el diagrama anterior:
- Una categoría puede tener muchos productos.
- Un producto pertenece a una y solo una categoría.
Por lo tanto, existe una relación de muchos a uno entre las filas de categories
tabla y filas en la products
tabla. El enlace entre las dos tablas es la categoryid
columna.
Necesitamos consultar los siguientes datos de ambas tablas:
-
productID
,productName
de laproducts
tabla. -
categoryName
de lacategories
tabla.
La siguiente consulta recupera datos de ambas tablas:
1
2
3
4
5
6
|
SELECT
productID, productName, categoryName
FROM
productos
INNER JOIN
categorías EN categorías.categoryID = productos.categoryID;
|
La condición de unión se especifica en la cláusula INNER JOIN
después de la palabra clave ON
como la expresión:
1
|
categorías.categoryID = productos.categoryID
|
Para cada fila en el products
, la consulta busca una fila correspondiente en la categories
tabla que tiene la misma categoryid.
Si hay una coincidencia entre dos filas en ambas tablas, devuelve una fila que contiene las columnas especificadas en la cláusula SELECT, es decir, identificación del producto, nombre del producto y nombre de la categoría; de lo contrario, verifica la siguiente fila en la tabla products
para encontrar la fila correspondiente en la tabla categories
. Este proceso continúa hasta que se examina la última fila de la tabla de productos.
SQL INNER JOIN: consulta de datos de tres tablas
Podemos usar las mismas técnicas para unir tres tablas.La siguiente consulta selecciona productID
, productName
, categoryName
y supplier
de las tablas products
, categories
y suppliers
:
1
2
3
4
5
6
7
8
9
10
11
|
SELECT
productID,
productName,
categoryName,
companyName COMO proveedor
FROM
productos
INNER JOIN
categorías EN categorías. categoryID = products.categoryID
INNER JOIN
proveedores EN proveedores.supplierID = productos.supplierID
|
INNER JOIN de SQL implícito
Existe otra forma de INNER JOIN
llamada unión interna implícita como se muestra a continuación:
1
2
3
4
5
6
7
|
SELECT
columna1, columna2
DESDE
tabla_1,
tabla_2
DONDE
condición_unión;
|
En este formulario, especifica todas las tablas unidas en la cláusula FROM
y coloque la condición de unión en la cláusula WHERE de la instrucción SELECT
. Podemos reescribir el ejemplo de consulta anterior usando el INNER JOIN
implícito de la siguiente manera:
1
2
3
4
5
6
7
|
SELECCIONAR
productID, productName, categoryName
FROM
productos,
categorías
DONDE
products.categoryID = categorías.categoryID;
|