Eliminar y actualizar filas utilizando la unión interna en SQL Server

La unión interna se utiliza para seleccionar filas de varias tablas basadas en una columna coincidente en una o más tablas. Compara cada valor de fila de una tabla con cada valor de fila de otra tabla para encontrar valores iguales. Si se encuentra el mismo valor en varias columnas de varias tablas, se devuelven en el conjunto de resultados.

Sintaxis de unión interna básica

SELECCIONA T1.Columnas, T2. Columnas de la Tabla1 como T1 TIPO INTERIOR Tabla2 T2 EN T1.Pk_Table1_Rowid = T2.Table2_Rowid; 

Ejemplo de unión interna

SI OBJECT_ID ('Tabla1', 'U') NO ES UNA TABLA DE GOTA NULA Tabla1 CREAR TABLA Tabla1 (Id INT, FruitName Varchar (100)); SI OBJECT_ID ('Tabla2', 'U') NO ES UNA TABLA DE GOTA NULA Tabla2 CREAR TABLA Tabla2 (Id INT, FruitName Varchar (100)); Insertar en valores Table1 (1, 'Mango'), (2, 'Graps'), (3, 'Banana'); Insertar en valores de Table2 (1, 'Mango'), (2, 'Graps'), (4, 'Orange'); SELECT * FROM Table1; SELECT * FROM Table2; SELECCIONAR * DESDE Tabla1 T1 Unión interna Tabla2 T2 EN T1. Id = T2 .Id; 

Actualización usando la unión interna en SQL Server

Usando el mismo concepto de unión interna, podemos actualizar las filas en una tabla basada en otra tabla usando la unión interna.

Sintaxis para la actualización con la unión interna

ACTUALIZACIÓN T2 SET T2. Nombre = T1. Nombre de la tabla 2 como T2. UNIÓN INTERNA Tabla1 como T1 EN T1. Id = T1 .Id; 

Para simplificar la sintaxis, T2 es un nombre de alias para la Tabla 2, cuyas filas queremos actualizar en función de las filas coincidentes con la Tabla1. En la cláusula se especifican los nombres de las columnas para encontrar filas coincidentes entre ambas tablas mediante la combinación interna. SET especifica que la columna de Table2 Nombre se actualizará con los valores de la columna de nombre de Table1.

Actualización con ejemplo de unión interna

SI OBJECT_ID ('Tabla1', 'U') NO ES UNA TABLA DE GOTA NULA Tabla1 CREAR TABLA Tabla1 (Id INT, FruitName Varchar (100)); SI OBJECT_ID ('Tabla2', 'U') NO ES UNA TABLA DE GOTA NULA Tabla2 CREAR TABLA Tabla2 (Id INT, FruitName Varchar (100)); Insertar en valores Table1 (1, 'Mango'), (2, 'Graps'), (3, 'Banana'); Insertar en valores de Table2 (1, 'Mango'), (2, NULL), (3, NULL); SELECT * FROM Table1; SELECT * FROM Table2; ACTUALIZACIÓN T2 SET T2. FruitName = T1 .FruitName DE la tabla 2 como T2. UNE INTERIOR Table1 como T1 EN T1. Id = T2 .Id; SELECT * FROM Table1; SELECT * FROM Table2; 

En el ejemplo anterior, las filas de valores NULL en la Tabla 2 se actualizan con las filas de la Tabla1 basadas en una columna de ID coincidente.

Antes de actualizar con Inner Join

Después de la actualización con Inner Join

Eliminar usando la unión interna

Usando el mismo concepto de unión interna, podemos eliminar filas de una tabla en base a otra tabla usando la unión interna.

Sintaxis para eliminar con unión interna

ELIMINAR T2 DE LA TABLA 2 COMO T2. UNIRSE A LA TABLA 1 T1 EN T1. Id = T1 .Id; 

Para simplificar la sintaxis, T2 es un nombre de alias para la Tabla2, cuyas filas queremos eliminar según las filas coincidentes con la Tabla1. En la cláusula se especifican los nombres de las columnas para encontrar filas coincidentes entre ambas tablas mediante la combinación interna.

SI OBJECT_ID ('Tabla1', 'U') NO ES UNA TABLA DE GOTA NULA Tabla1 CREAR TABLA Tabla1 (Id INT, FruitName Varchar (100)); SI OBJECT_ID ('Tabla2', 'U') NO ES UNA TABLA DE GOTA NULA Tabla2 CREAR TABLA Tabla2 (Id INT, FruitName Varchar (100)); Insertar en los valores de Table1 (1, 'Mango'), (2, 'Graps'), (3, 'Banana'), (4, 'WaterMelon'), (5, 'Orange'); Insertar en valores de Table2 (1, 'Mango'), (2, 'Graps'), (3, 'Banana'), (6, 'Pear'), (7, 'Papaya'); SELECT * FROM Table1; SELECT * FROM Table2; ELIMINAR T2 DE LA TABLA 2 COMO T2. UNIRSE A LA TABLA 1 T1 EN T1. Id = T2 .Id; SELECT * FROM Table1; SELECT * FROM Table2; 

En el ejemplo anterior, las filas con Id (1,2,3) se eliminan de la tabla T2 porque coincide con la columna Table1 (Id) con la unión interna.

Antes de eliminar con Inner Join

Después de eliminar con Inner Join

Actualmente, el servidor SQL no admite la eliminación de filas de ambas tablas con una declaración de eliminación como otras RDBMS.

Véase también SQL Server Archives.