sql >> Base de Datos >  >> RDS >> Sqlserver

Una descripción general de los tipos de SQL Join con ejemplos

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

Autocombinación de SQL

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.

Combinación cruzada de SQL

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:

  • La tabla [Empleado] tiene tres filas para Emp ID 1,2 y 3.
  • La tabla [Dirección] tiene registros para Emp ID 1,2,7 y 8.

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.

Unión externa de SQL

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.

Unión externa izquierda

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:

  • Filas coincidentes:Emp ID 1 y 2 existen en las tablas izquierda y derecha.
  • Fila no coincidente:Emp ID 3 no existe en la tabla de la derecha. Por lo tanto, tenemos un valor NULL en el resultado de la consulta.

Unión externa derecha

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:

  • Filas coincidentes:Emp ID 1 y 2 existen en ambas tablas; por lo tanto, estas filas son filas coincidentes.
  • Filas no coincidentes:en la tabla de la derecha, tenemos filas adicionales para Emp ID 7 y 8, pero estas filas no están disponibles en la tabla de la izquierda. Por lo tanto, obtenemos un valor NULL en la combinación externa derecha para estas filas.

Unión externa completa

Una combinación externa completa devuelve las siguientes filas en la salida:

  • Filas coincidentes entre dos tablas.
  • Filas no coincidentes similares a la combinación externa izquierda:valores NULL para filas no coincidentes de la tabla derecha.
  • Filas no coincidentes similares a la combinación externa derecha:valores nulos para filas no coincidentes de la tabla de la izquierda.

Uniones SQL con varias tablas

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.

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

Analicemos la consulta en los siguientes pasos:

  • Resultado intermedio 1:  La primera combinación interna es entre [Recursos humanos]. [Empleados] y [Persona]. Tabla [Persona].
  • Resultado intermedio 2:  Unión interna entre la tabla [Resultado intermedio 1] y [Recursos humanos].[Historial del departamento de empleados].
  • Resultado intermedio 3:  Unión interna entre las tablas [Resultado intermedio 2] y [Recursos humanos].[Departamento].

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 .

Valores NULL y uniones SQL

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.

Mejores prácticas de unión SQL

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.

  • Las combinaciones internas generan las filas coincidentes de la condición de combinación en ambas tablas.
  • Cross join devuelve el producto cartesiano de ambas tablas.
  • La unión externa devuelve las filas coincidentes y no coincidentes según las palabras clave izquierda, derecha y completa.
  • La autocombinación de SQL une una tabla a sí misma.
  • Siempre debe usar un alias de tabla al usar las uniones en las consultas.
  • Use siempre el nombre de dos partes [alias de la tabla].[columna] formato de nombre para las columnas en las consultas.
  • En el caso de múltiples uniones SQL en una consulta, debe usar los órdenes lógicos de las tablas de tal manera que satisfaga sus requisitos de datos y minimice el flujo de datos entre varios operadores del plan de ejecución.
  • Puede combinar varias uniones como unión interna, unión externa y autounión juntas. Sin embargo, debe usar las uniones y sus órdenes para obtener los datos requeridos.