5th Dec 2022 Lectura de 5 minutos Guía ilustrada del INNER JOIN de SQL Dorota Wdzięczna JOIN princípios básicos de SQL Cláusulas SQL Índice ¿Qué es un INNER JOIN? Cómo funciona el INNER JOIN ¿JOIN o INNER JOIN? Unir con WHERE Usando un INNER JOIN en múltiples tablas INNER JOIN vs. CROSS JOIN Más información sobre INNER JOINs ¿Qué es un INNER JOIN de SQL y cómo funciona? Averigüémoslo. En mi último artículo, hablé de la función Operación CROSS JOIN en SQL. Hoy, veremos INNER JOIN y cómo utilizarlo. ¿Es lo mismo que un JOIN? ¿Cuántas tablas se pueden enlazar con un INNER JOIN? Todas estas son buenas preguntas. Veamos las respuestas. ¿Qué es un INNER JOIN? INNER JOIN combina datos de varias tablas uniéndolas en base a un registro coincidente. Este tipo de unión requiere una condición de unión, que explicaremos en un momento. Para ilustrar cómo funciona INNER JOIN, utilizaremos algunas tablas sencillas. Dos de ellas, color y shoes se muestran a continuación: color id name 1 yellow 2 green 3 pink shoes id size color_id 1 seven 2 2 eight 2 3 nine 2 4 seven 1 5 nine 1 6 seven 3 7 ten NULL La tabla color almacena un número de identificación y un nombre para cada color. La tabla shoes tabla almacena un número de identificación para cada par de zapatos, la talla del zapato y un número de identificación que se refiere a un color en la color tabla. Cómo funciona el INNER JOIN En este ejemplo, INNER JOIN une los registros de la tabla shoes con los registros de la tabla color a través de la columna color_id de la tabla shoes de la tabla. Los valores de esta columna son los mismos que los de la columna id de la tabla color de la tabla, por lo que produce el conjunto de resultados previsto. Observe la siguiente consulta: SELECT * FROM shoes INNER JOIN color ON color.id = shoes.color_id; La sentencia SELECT toma todos los registros de la tabla que aparece después de la cláusula FROM - en este caso, la tabla shoes tabla. A continuación, hay un INNER JOIN con el nombre de la tabla con la que queremos comparar los registros (es decir, la color tabla). El predicado ON establece la condición de coincidencia que deben tener los registros de ambas tablas. Aquí la condición es que el campo id de la tabla color y el campo color_id de la tabla shoes deben tener valores coincidentes. Si un registro no tiene una coincidencia, quedará fuera de los resultados. Observe el conjunto de resultados de esta consulta: id size color_id id name 1 seven 2 2 green 2 eight 2 2 green 3 nine 2 2 green 4 seven 1 1 yellow 5 nine 1 1 yellow 6 seven 3 3 pink Ahora podemos ver el color de cada par de zapatos, gracias a INNER JOIN. Pero fíjate que el shoes registro con NULL en la columna color_id no se muestra: no ha coincidido con ninguno de los registros de la color tabla. ¿JOIN o INNER JOIN? Puede omitir la parte INNER de INNER JOIN; JOIN funciona de la misma manera. Observe la siguiente sentencia. SELECT * FROM shoes JOIN color ON color.id = shoes.color_id; Unir con WHERE También puede utilizar una cláusula WHERE como una INNER JOIN. (Esta es una versión más antigua de la sintaxis SQL (ANSI-89); los comandos JOIN utilizan ANSI-92). Así es como funciona el uso de un WHERE: SELECT * FROM shoes, color WHERE color.id = shoes.color_id ; El resultado es el mismo: id size color_id id name 1 seven 2 2 green 2 eight 2 2 green 3 nine 2 2 green 4 seven 1 1 yellow 5 nine 1 1 yellow 6 seven 3 3 pink Usando un INNER JOIN en múltiples tablas INNER JOIN puede utilizarse en más de dos tablas. Mire las tres tablas de abajo: color id name 1 yellow 2 green 3 pink material id name 1 leather 2 cotton 3 NULL shoes id size color_id material_id 1 seven 2 1 4 seven 1 2 5 nine 1 1 6 seven 3 NULL 7 ten NULL 1 Utilicemos un INNER JOIN para combinar la información de las tres tablas. La consulta de abajo recupera los registros de todos los zapatos que tienen información de color y material: SELECT * FROM shoes JOIN color ON color.id = shoes.color_id JOIN material ON material.id = shoes.material_id ; Observe que sólo se muestran en el conjunto de resultados los zapatos que no tienen registros deNULL en las columnas color_id y material_id. id size color_id material_id id name id name 1 seven 2 1 2 green 1 leather 4 seven 1 2 1 yellow 2 cotton 5 nine 1 1 1 yellow 1 leather INNER JOIN vs. CROSS JOIN Como hemos visto, INNER JOIN combina la información de dos o más registros que tienen campos coincidentes. ¿Qué ocurre cuando se utiliza CROSS JOIN para unir los registros shoes y color CROSS JOIN no toma ninguna condición de ON, lo que significa que devuelve un producto cartesiano. Observa la consulta y el conjunto de resultados que se muestran a continuación: SELECT * FROM shoes CROSS JOIN color ; ¿Resultado? id size color_id id name 1 seven 2 1 yellow 2 eight 2 1 yellow 3 nine 2 1 yellow 4 seven 1 1 yellow 5 nine 1 1 yellow 6 seven 3 1 yellow 7 ten NULL 1 yellow 1 seven 2 2 green 2 eight 2 2 green 3 nine 2 2 green 4 seven 1 2 green 5 nine 1 2 green 6 seven 3 2 green 7 ten NULL 2 green 1 seven 2 3 pink 2 eight 2 3 pink 3 nine 2 3 pink 4 seven 1 3 pink 5 nine 1 3 pink 6 seven 3 3 pink 7 ten NULL 3 pink Todos los registros de la tabla shoes se han unido a todos los registros de la tabla color tabla. Esto crea algunos errores. Por ejemplo, algunos zapatos no aparecen con el color correcto: los zapatos de la talla ocho sólo están disponibles en verde (su valor color_id es 2), pero en esta instancia de unión se emparejan con otros colores. Los registros de NULL en la tabla shoes también se emparejan con los colores, aunque no tengan un valor comparable en el campo color_id. Más información sobre INNER JOINs INNER JOINLas combinaciones de colores son bastante comunes en SQL. Nuestro objetivo en este artículo fue introducir los conceptos detrás de INNER JOIN, pero hay mucho más que aprender. ¿Por qué no echas un vistazo a la página de LearnSQL SQL para principiantes curso para saber más? Tags: JOIN princípios básicos de SQL Cláusulas SQL