Elimina e aggiorna le righe utilizzando Join interno in SQL Server

Inner join viene utilizzato per selezionare le righe da più tabelle in base a una colonna corrispondente in una o più tabelle. Confronta ogni valore di riga di una tabella con ogni valore di riga di un'altra tabella per trovare valori uguali. Se il valore uguale viene trovato in più colonne da più tabelle, vengono restituite nel set di risultati.

Basic Inner Join Sintassi

SELEZIONA T1.Colonne, T2. Colonne FROM Table1 come T1 INNER JOIN Table2 T2 ON T1.Pk_Table1_Rowid = T2.Table2_Rowid; 

Esempio di unione interna

IF OBJECT_ID ('Table1', 'U') NON È NULL DROP TABLE Table1 CREATE TABLE Table1 (Id INT, FruitName Varchar (100)); IF OBJECT_ID ('Table2', 'U') NON È NULL DROP TABLE Table2 CREATE TABLE Table2 (Id INT, FruitName Varchar (100)); Inserisci in valori Table1 (1, 'Mango'), (2, 'Graps'), (3, 'Banana'); Inserisci in valori Table2 (1, 'Mango'), (2, 'Graps'), (4, 'Orange'); SELEZIONA * DA Tabella1; SELEZIONA * DA Tabella2; SELECT * FROM Table1 T1 Inner Join Table2 T2 ON T1. Id = T2 .Id; 

Aggiornamento tramite join interno in SQL Server

Usando lo stesso concetto di Inner join, possiamo aggiornare le righe in una tabella sulla base di un'altra tabella usando Inner Join.

Sintassi per l'aggiornamento con Join interno

UPDATE T2 SET T2. Nome = T1 .Nome FROM Table2 come T2 INNER JOIN Table1 come T1 ON T1. Id = T1 .Id; 

Per semplificare la sintassi, T2 è un nome alias per Table2, le cui righe vogliamo aggiornare in base alle righe corrispondenti con Table1. Sulla clausola specifica i nomi delle colonne per trovare le righe corrispondenti tra entrambe le tabelle utilizzando Inner Join. SET specifica la colonna Table2 Il nome verrà aggiornato con i valori della colonna nome Table1.

Aggiorna con Esempio di Join interno

IF OBJECT_ID ('Table1', 'U') NON È NULL DROP TABLE Table1 CREATE TABLE Table1 (Id INT, FruitName Varchar (100)); IF OBJECT_ID ('Table2', 'U') NON È NULL DROP TABLE Table2 CREATE TABLE Table2 (Id INT, FruitName Varchar (100)); Inserisci in valori Table1 (1, 'Mango'), (2, 'Graps'), (3, 'Banana'); Inserisci in valori Table2 (1, 'Mango'), (2, NULL), (3, NULL); SELEZIONA * DA Tabella1; SELEZIONA * DA Tabella2; UPDATE T2 SET T2. FruitName = T1 .FruitName FROM Table2 come T2 INNER JOIN Table1 come T1 ON T1. Id = T2 .Id; SELEZIONA * DA Tabella1; SELEZIONA * DA Tabella2; 

Nell'esempio precedente, le righe NULL in Table2 vengono aggiornate con le righe Table1 in base a una colonna ID corrispondente.

Prima dell'aggiornamento con Join interno

Dopo l'aggiornamento con Join interno

Elimina utilizzando Join interno

Utilizzando lo stesso concetto di Inner join, possiamo eliminare le righe da una tabella in base a un'altra tabella usando Inner Join.

Sintassi per eliminare con Inner Join

DELETE T2 FROM Table2 come T2 INNER JOIN Table1 come T1 ON T1. Id = T1 .Id; 

Per semplificare la sintassi, T2 è un nome alias per Table2, le cui righe vogliamo eliminare in base alle righe corrispondenti con Table1. La clausola on specifica i nomi delle colonne per trovare le righe corrispondenti tra entrambe le tabelle utilizzando Inner Join.

IF OBJECT_ID ('Table1', 'U') NON È NULL DROP TABLE Table1 CREATE TABLE Table1 (Id INT, FruitName Varchar (100)); IF OBJECT_ID ('Table2', 'U') NON È NULL DROP TABLE Table2 CREATE TABLE Table2 (Id INT, FruitName Varchar (100)); Inserisci in valori Table1 (1, 'Mango'), (2, 'Graps'), (3, 'Banana'), (4, 'WaterMelon'), (5, 'Orange'); Inserisci in Tabella 2 Valori (1, 'Mango'), (2, 'Graps'), (3, 'Banana'), (6, 'Pera'), (7, 'Papaya'); SELEZIONA * DA Tabella1; SELEZIONA * DA Tabella2; DELETE T2 FROM Table2 come T2 INNER JOIN Table1 come T1 ON T1. Id = T2 .Id; SELEZIONA * DA Tabella1; SELEZIONA * DA Tabella2; 

Nell'esempio sopra, le righe con ID (1,2,3) vengono eliminate dalla tabella T2 perché corrispondono alla colonna Table1 (Id) con join interno.

Prima di eliminare con Inner Join

Dopo Elimina con Inner Join

Attualmente il server SQL non supporta l'eliminazione di righe da entrambe le tabelle utilizzando un'istruzione delete come altri RDBMS.

Vedi anche Archivi SQL Server