SQLShack (Español)

INNER JOIN vs LEFT JOIN, es decir la pregunta. Hoy, explicaremos brevemente cómo se utilizan estos dos tipos de combinación y cuál es la diferencia. Repasaremos este tema más adelante cuando expandamos nuestro modelo y podamos escribir consultas mucho más complejas.

Cambios en los datos

Antes de comparar INNER JOIN vs LEFT JOIN, veamos lo que sabemos actualmente. Hasta ahora, en esta serie, hemos explicado los conceptos básicos de la base de datos: cómo crear bases de datos y tablas, cómo completar tablas con datos y verificar qué se almacena en ellas mediante consultas simples. Incluso nos hemos unido a dos mesas en el artículo anterior. Ahora estamos listos para el siguiente paso.

Pero antes de continuar, hagamos un pequeño cambio en nuestros datos. Agregaremos 2 filas en la tabla de países, usando los siguientes comandos INSERT INTO:

Ahora revisaremos el contenido de ambas tablas:

Puede notar fácilmente que tenemos 2 filas nuevas en el país de la tabla, una para España y otra para Rusia. Sus ID son 6 y 7. También observe que en la tabla de ciudades no hay country_id con valor 6 o 7. Esto simplemente significa que no tenemos una ciudad de Rusia o España en nuestra base de datos. Usaremos este hecho más adelante.

INNER JOIN

Analicemos estas dos consultas:

El resultado que devuelven se presenta en la siguiente imagen:

Ambas consultas devuelven exactamente el mismo resultado. Esto no es por accidente sino el resultado del hecho de que se trata de la misma consulta escrita de dos formas diferentes. Ambas formas son correctas y puede usar cualquiera de ellas.

En la primera consulta, enumeramos todas las tablas que usamos en la parte FROM de la consulta (FROM país, ciudad) y luego seguimos la combinación condición en la parte WHERE de la consulta (WHERE city.country_id = country.id). En caso de que olvidemos escribir esta condición de unión, tendríamos el producto cartesiano de ambas tablas.

En la segunda consulta, solo tenemos una tabla en la parte FROM de la consulta (FROM país) y luego tenemos la segunda tabla y la condición JOIN en la parte JOIN de la consulta (INNER JOIN city ON city.country_id = country.id).

Si bien ambas consultas están bien escritas, sugeriría que siempre usa INNER JOIN en lugar de enumerar tablas y unirlas en la parte DONDE de la consulta. Hay algunas razones para ello:

  • La legibilidad es mucho mejor porque la tabla utilizada y la condición JOIN relacionada están en la misma línea. Puede ver fácilmente si omitió la condición JOIN o no
  • Si desea usar otras JOIN más adelante (LEFT o RIGHT), no podría hacerlo (fácilmente) a menos que haya usado INNER JOIN antes que

Ahora, comentemos qué consultas realmente devolvieron:

  • Todos los pares de países y ciudades que están relacionados (a través de una clave externa)
  • No tenemos 2 países en la lista (España y Rusia), porque no tienen ninguna ciudad relacionada en la tabla de ciudades

LEFT JOIN

Repetiré esto: «No tenemos 2 países en la lista (España y Rusia) porque no tienen ninguna ciudad relacionada en la tabla de ciudades». Esto resultará crucial al comparar INNER JOIN vs LEFT JOIN.

En algunos casos, queremos tener incluso estos registros en nuestros resultados. Por ejemplo, simplemente desea ver en el resultado que estos países no tienen registros relacionados en otra tabla. Esto podría ser parte de algún control, o tal vez simplemente contando casos, etc. No importa cuál sea la motivación detrás de ese deseo, técnicamente deberíamos ser capaces de hacer eso. Y somos. En las bases de datos, LEFT JOIN hace exactamente eso.

El resultado de LEFT JOIN será el mismo que el resultado de INNER JOIN + tendremos filas, de la tabla «izquierda», sin un par en el tabla «derecha». Usaremos la misma consulta INNER JOIN y simplemente reemplazaremos la palabra INNER con LEFT. Este es el resultado:

Puede notar fácilmente que tenemos 2 filas más, en comparación con el resultado del INNER JOIN consulta. Estas son filas para Rusia y España. Dado que ninguno de los dos tiene ninguna ciudad relacionada, todos los atributos de ciudad en estas dos filas tienen valores NULL (no están definidos). Esa es la mayor diferencia cuando se compara INNER JOIN con LEFT JOIN.

RIGHT JOIN

Al menos escuchará sobre RIGHT JOIN. Rara vez se usa porque devuelve el mismo resultado que LEFT JOIN. Por otro lado, las consultas que usan LEFT JOIN son mucho más fáciles de leer porque simplemente enumeramos las tablas una tras otra.

Este es el equivalente de la consulta anterior usando RIGHT JOIN:

Puede notar que los valores devueltos son los mismos, solo que en este caso los valores de la tabla de ciudades están en las primeras 5 columnas, y país- los valores relacionados vienen después de ellos.

INNER JOIN vs LEFT JOIN

INNER JOIN vs LEFT JOIN?En realidad, esa no es la cuestión en absoluto. Utilizará INNER JOIN cuando desee devolver solo los registros que tengan un par en ambos lados, y usará LEFT JOIN cuando necesite todos los registros de la tabla «izquierda», sin importar si tienen par en la tabla «derecha» O no. Si necesita todos los registros de ambas tablas, sin importar si tienen un par, deberá usar CROSS JOIN (o simularlo usando LEFT JOINs y UNION). Más sobre eso en los próximos artículos.

Tabla de contenido

Aprenda SQL: CREATE DATABASE & Operaciones de CREATE TABLE

Aprenda SQL: INSERT INTO TABLE

Aprenda SQL: Clave principal

Aprenda SQL: Clave externa

Aprenda SQL: instrucción SELECT

Aprenda SQL: INNER JOIN vs LEFT JOIN

Aprenda SQL: Scripts SQL

Aprender SQL: Tipos de relaciones

Aprender SQL: Unir varias tablas

Aprender SQL: Funciones agregadas

Aprender SQL: Cómo escribir una consulta SELECT compleja

Aprenda SQL: La base de datos INFORMATION_SCHEMA

Aprenda SQL: Tipos de datos SQL

Aprender SQL: teoría de conjuntos

Aprender SQL: funciones definidas por el usuario

Aprender SQL: procedimientos almacenados definidos por el usuario

Aprender SQL: Vistas SQL

Aprender SQL: Activadores SQL

Aprender SQL: Practicar consultas SQL

Aprenda SQL: ejemplos de consultas SQL

Aprenda SQL: cree un informe manualmente uso de consultas SQL

Aprenda SQL: funciones de fecha y hora de SQL Server

Aprenda SQL: cree informes de SQL Server utilizando funciones de fecha y hora

Aprenda SQL: tablas dinámicas de SQL Server

Aprenda SQL: exportación de SQL Server a Excel

Aprenda SQL: Introducción a los bucles de SQL Server

Aprenda SQL: cursores de SQL Server

Aprenda SQL: prácticas recomendadas de SQL para eliminar y actualizar datos

Aprenda SQL: convenciones de nomenclatura

Aprenda SQL: Trabajos relacionados con SQL

Aprenda SQL: Uniones no Equi en SQL Server

Aprenda SQL: SQL Inyección

  • Autor
  • Publicaciones recientes
Emil es un profesional de bases de datos con más de 10 años de experiencia en todo lo relacionado con bases de datos. Durante años, trabajó en la industria de TI y finanzas y ahora trabaja como autónomo.
Sus compromisos pasados y presentes varían desde el diseño y codificación de bases de datos hasta la enseñanza, la consultoría y la redacción de bases de datos. Además, no hay que olvidar, BI, creación de algoritmos, ajedrez, filatelia, 2 perros, 2 gatos, 1 esposa, 1 bebé …
Lo puedes encontrar en LinkedIn
Ver todas las publicaciones de Emil Drkusic

Últimas publicaciones de Emil Drkusic (ver todas)
  • Aprenda SQL: Inyección SQL – 2 de noviembre de 2020
  • Aprenda SQL: Non-Equi Joins en SQL Server – 29 de septiembre de 2020
  • Aprenda SQL: Trabajos relacionados con SQL – 1 de septiembre de 2020

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *