Tanto las combinaciones internas como externas se utilizan para combinar datos de dos o más tablas; sin embargo, existen algunas diferencias clave. Lea este artículo para conocer los puntos fuertes de cada comando y cuándo usarlos.
Para aprovechar al máximo esta y nuestras otras lecciones, asegúrese de practicar con los ejemplos.
¡Todos los Los ejemplos de esta lección se basan en Microsoft SQL Server Management Studio y la base de datos AdventureWorks2012. Empiece a utilizar estas herramientas gratuitas con mi Guía Introducción a SQL Server.
¿Cuál es la diferencia entre uniones internas y uniones externas?
Las uniones internas y externas son filas combinadas de dos o más tablas en un solo resultado utilizando una condición de combinación. La condición de unión especifica cómo se hacen coincidir las columnas de cada tabla entre sí. En la mayoría de los casos, el objetivo es encontrar valores iguales entre tablas e incluir esas coincidencias.
El caso más común para esto es cuando está haciendo coincidir la clave externa de una tabla con la clave principal de otra. , como cuando se usa un ID para buscar un valor.
Aunque las uniones internas y externas incluyen filas de ambas tablas cuando la condición de coincidencia es exitosa, difieren en cómo manejan una condición de coincidencia falsa.
Las combinaciones internas no incluyen filas que no coinciden; mientras que las combinaciones externas sí las incluyen.
Profundicemos un poco más en la mecánica de cada
Mecánica de combinación interna
Una combinación interna se usa para devolver resultados combinando filas de dos o más tablas.
En su caso más simple, donde no hay una condición de combinación, una combinación interna combinaría todas las filas de una tabla con las de otra. Si la primera tabla contiene tres filas y la segunda cuatro, ¡entonces el resultado final contendría doce (3 x 4 = 12)!
El propósito de la condición de unión es limitar qué filas se combinan. En la mayoría de los casos, limitamos las filas a las que coinciden con una columna.
Si una persona tiene más de un número de teléfono, se establece más de una coincidencia. A partir de esto, puede ver que podemos obtener más filas devueltas de las que tenemos para cada persona.
Por el contrario, si una persona no tiene un número de teléfono, no habrá una entrada en PersonPhone y no se realizará ninguna coincidencia. Esa persona en particular no se incluirá en los resultados, ya que solo se incluyen aquellos con coincidencias.
Probemos con un ejemplo.
Ejemplo de unión interna
Supongamos el gerente de recursos humanos desea crear un directorio telefónico. Quieren el nombre, apellido, cargo y números de teléfono de la persona. ¿Qué consulta podría utilizar para crear esto?
Aquí hay una que funcionaría:
SELECT P.FirstName, P.LastName, P.Title, PH.PhoneNumberFROM Person.Person AS P INNER JOIN Person.PersonPhone AS PH ON P.BusinessEntityID = PH.BusinessEntityID AND PH.PhoneNumberTypeID = 3ORDER BY P.LastName
La INNER JOIN especifica qué tablas unirse y la condición de coincidencia para hacerlo. La condición PH.Phone NumberTyeID = 3 limita la consulta a números de trabajo.
Si ejecuta lo anterior, obtendrá los siguientes resultados:
Tenga en cuenta que la unión interna solo devuelve la fila donde la condición de coincidencia es verdad. En este ejemplo, no se incluyen las filas en las que el BusinessEntityID no coincide. Esto podría ser un problema si una persona no tiene un número de teléfono, ya que esos empleados no estarían en la lista.
Si desea incluir a estos empleados, puede usar una combinación externa.
Mecánicas de combinación externa
Una combinación externa se usa para devolver resultados al combinar filas de dos o más tablas. Pero a diferencia de una combinación interna, la combinación externa devolverá todas las filas de una tabla especificada, incluso si la condición de combinación falla.
Tome el ejemplo anterior del directorio telefónico. Si el gerente de RR.HH. quisiera enumerar a todos los empleados independientemente de si tenían un número de teléfono del trabajo, entonces usar una combinación externa lo haría.
SELECT P.FirstName, P.LastName, P.Title, PH.PhoneNumberFROM Person.Person AS P LEFT OUTER JOIN Person.PersonPhone AS PH ON P.BusinessEntityID = PH.BusinessEntityID AND PH.PhoneNumberTypeID = 3ORDER BY P.LastName
Puede Obtenga más información sobre las combinaciones externas izquierda y derecha en este artículo, por ahora solo comprenda que cuando se usa una LEFT OUTER JOIN, todas las filas de la tabla en la cláusula FROM se incluyen en el resultado, incluso si no se encuentra una coincidencia con la otra tabla.
Cuando no se encuentra una coincidencia, se coloca un NULL en la columna.
Puede ver esto en acción a continuación:
Observe en el ejemplo el PhoneNumber para Catherine Abel es NULL. Esto se debe a que el número de trabajo de Catherine no aparece en la lista y no se encontró ninguna coincidencia durante la combinación.
Si esto hubiera sido una combinación interna, esta fila no se habría incluido en los resultados.