SQL JOIN es una cláusula que se usa para combinar varias tablas y recuperar datos basados en un campo común en bases de datos relacionales. Los profesionales de las bases de datos utilizan las normalizaciones para garantizar y mejorar la integridad de los datos. En las diversas formas de normalización, los datos se distribuyen en múltiples tablas lógicas. Estas tablas utilizan restricciones de referencia (clave principal y claves externas) para imponer la integridad de los datos en las tablas de SQL Server. En la siguiente imagen, podemos vislumbrar el proceso de normalización de la base de datos.
Comprender los diferentes tipos de SQL JOIN
SQL JOIN genera datos significativos mediante la combinación de varias tablas relacionales. Estas tablas se relacionan mediante una clave y tienen relaciones de uno a uno o de uno a muchos. Para recuperar los datos correctos, debe conocer los requisitos de datos y los mecanismos de combinación correctos. SQL Server admite múltiples uniones y cada método tiene una forma específica de recuperar datos de varias tablas. La siguiente imagen especifica las uniones de SQL Server admitidas.
Unión interna de SQL
La combinación interna de SQL incluye filas de las tablas donde se cumplen las condiciones de combinación. Por ejemplo, en el siguiente diagrama de Venn, la unión interna devuelve las filas coincidentes de la Tabla A y la Tabla B.
En el siguiente ejemplo, observe lo siguiente:
- Tenemos dos tablas:[Empleados] y [Dirección].
- La consulta SQL se une a las columnas [Empleados].[EmpID] y [Dirección].[ID].
El resultado de la consulta devuelve los registros de empleados para EmpID que existen en ambas tablas.
La combinación interna devuelve filas coincidentes de ambas tablas; por lo tanto, también se conoce como unión Equi. Si no especificamos la palabra clave interna, SQL Server realiza la operación de combinación interna.
En otro tipo de unión interna, una unión theta, no usamos el operador de igualdad (=) en la cláusula ON. En su lugar, usamos operadores de no igualdad como
SELECCIONE * FROM Table1 T1, Table2 T2 WHERE T1.Precio
En una autocombinación, SQL Server une la tabla consigo mismo. Esto significa que el nombre de la tabla aparece dos veces en la cláusula from.
A continuación, tenemos una tabla [Emp] que tiene los datos de los empleados y de sus gerentes. La autocombinación es útil para consultar datos jerárquicos. Por ejemplo, en la tabla de empleados, podemos usar la autounión para conocer el nombre de cada empleado y su gerente de informes.
La consulta anterior coloca una autocombinación en la tabla [Emp]. Une la columna EmpMgrID con la columna EmpID y devuelve las filas coincidentes.
En la unión cruzada, SQL Server devuelve un producto cartesiano de ambas tablas. Por ejemplo, en la imagen a continuación, realizamos una unión cruzada para las tablas A y B.
La combinación cruzada une cada fila de la tabla A con cada fila disponible en la tabla B. Por lo tanto, la salida también se conoce como producto cartesiano de ambas tablas. En la imagen de abajo, tenga en cuenta lo siguiente:
En la salida de unión cruzada, la fila 1 de la tabla [Empleado] se une con todas las filas de la tabla [Dirección] y sigue el mismo patrón para las filas restantes.
Si la primera tabla tiene x número de filas y la segunda tabla tiene n número de filas, la unión cruzada da x*n número de filas en la salida. Debe evitar la unión cruzada en tablas más grandes porque podría devolver una gran cantidad de registros y SQL Server requiere mucha potencia informática (CPU, memoria e IO) para manejar datos tan extensos.
Como explicamos anteriormente, la combinación interna devuelve las filas coincidentes de ambas tablas. Cuando se usa una combinación externa de SQL, no solo enumera las filas coincidentes, sino que también devuelve las filas no coincidentes de las otras tablas. La fila no coincidente depende de las palabras clave izquierda, derecha o completa.
La siguiente imagen describe en un alto nivel la combinación externa izquierda, derecha y completa.
La combinación externa izquierda de SQL devuelve las filas coincidentes de ambas tablas junto con las filas no coincidentes de la tabla izquierda. Si un registro de la tabla de la izquierda no tiene filas coincidentes en la tabla de la derecha, muestra el registro con valores NULL.
En el siguiente ejemplo, la combinación externa izquierda devuelve las siguientes filas:
La combinación externa derecha de SQL devuelve las filas coincidentes de ambas tablas junto con las filas no coincidentes de la tabla derecha. Si un registro de la tabla de la derecha no tiene filas coincidentes en la tabla de la izquierda, muestra el registro con valores NULL.
En el siguiente ejemplo, tenemos las siguientes filas de salida:
Una combinación externa completa devuelve las siguientes filas en la salida:
En los ejemplos anteriores, usamos dos tablas en una consulta SQL para realizar operaciones de combinación. Principalmente, unimos varias tablas y devuelve los datos relevantes.
La siguiente consulta utiliza múltiples uniones internas.
Analicemos la consulta en los siguientes pasos:
Una vez que ejecuta la consulta con varias uniones, el optimizador de consultas prepara el plan de ejecución. Prepara un plan de ejecución rentable que satisface las condiciones de unión con el uso de recursos; por ejemplo, en el plan de ejecución real a continuación, podemos ver múltiples bucles anidados (unión interna) y coincidencias hash (unión interna) combinando datos de múltiples tablas de unión .
Supongamos que tenemos valores NULL en las columnas de la tabla y unimos las tablas en esas columnas. ¿SQL Server coincide con valores NULL?
Los valores NULL no coinciden entre sí. Por lo tanto, SQL Server no pudo devolver la fila coincidente. En el siguiente ejemplo, tenemos NULL en la columna EmpID de la tabla [Empleados]. Por lo tanto, en la salida, devuelve la fila correspondiente solo para [EmpID] 2.
Podemos obtener esta fila NULL en la salida en el caso de una combinación externa de SQL porque también devuelve las filas no coincidentes.
En este artículo, exploramos los diferentes tipos de unión SQL. Estas son algunas de las mejores prácticas importantes para recordar y aplicar al usar uniones SQL.Autocombinación de SQL
Combinación cruzada de SQL
Unión externa de SQL
Unión externa izquierda
Unión externa derecha
Unión externa completa
Uniones SQL con varias tablas
USE [AdventureWorks2019]
GO
SELECT
e.[BusinessEntityID]
,p.[FirstName]
,p.[MiddleName]
,p.[LastName]
,e.[JobTitle]
,d.[Name] AS [Department]
,d.[GroupName]
,edh.[StartDate]
FROM [HumanResources].[Employee] e
INNER JOIN [Person].[Person] p
ON p.[BusinessEntityID] = e.[BusinessEntityID]
INNER JOIN [HumanResources].[EmployeeDepartmentHistory] edh
ON e.[BusinessEntityID] = edh.[BusinessEntityID]
INNER JOIN [HumanResources].[Department] d
ON edh.[DepartmentID] = d.[DepartmentID]
WHERE edh.EndDate IS NULL
GO
Valores NULL y uniones SQL
Mejores prácticas de unión SQL