Supprimer et mettre à jour des lignes à l'aide d'une jointure interne dans SQL Server

La jointure interne est utilisée pour sélectionner des lignes dans plusieurs tables en fonction d'une colonne correspondante dans une ou plusieurs tables. Il compare chaque valeur de ligne d'une table avec chaque valeur de ligne d'une autre table pour trouver des valeurs égales. Si des valeurs égales sont trouvées dans plusieurs colonnes de plusieurs tables, elles sont renvoyées dans le jeu de résultats.

Syntaxe de base de jointure interne

SÉLECTIONNER T1.Colonnes, T2. Colonnes FROM Table1 en tant que T1 INNER JOIN Table2 T2 ON T1.Pk_Table1_Rowid = T2.Table2_Rowid; 

Exemple de jointure interne

SI OBJECT_ID ('Table1', 'U') N'EST PAS NUL TABLE DROP TABLE1 CREATE TABLE Table1 (Id INT, FruitName Varchar (100)); SI OBJECT_ID ('Table2', 'U') N'EST PAS NUL TABLE DROP TABLE2 CREATE TABLE Table2 (Id INT, FruitName Varchar (100)); Insérer dans le tableau 1 Valeurs (1, 'Mangue'), (2, 'Graps'), (3, 'Banane'); Insérer dans le tableau 2 Valeurs (1, 'Mangue'), (2, 'Graps'), (4, 'Orange'); SELECT * FROM Table1; SELECT * FROM Table2; SELECT * FROM Table1 T1 Jointure intérieure Table2 T2 ON T1. Id = T2 .Id; 

Mise à jour à l'aide d'une jointure interne dans SQL Server

En utilisant le même concept de jointure interne, nous pouvons mettre à jour les lignes d'une table à partir d'une autre table à l'aide de la jointure interne.

Syntaxe de mise à jour avec jointure interne

UPDATE T2 SET T2. Name = T1 .Name FROM Table2 en tant que T2 INNER JOIN Table1 en tant que T1 ON T1. Id = T1 .Id; 

Pour simplifier la syntaxe, T2 est un nom d'alias pour Table2, dont nous voulons mettre à jour les lignes en fonction des lignes correspondantes avec Table1. La clause On spécifie les noms de colonne pour rechercher les lignes correspondantes entre les deux tables à l'aide de Inner Join. SET spécifie que le nom de la colonne Table2 sera mis à jour avec les valeurs de la colonne du nom de Table1.

Mise à jour avec un exemple de jointure interne

SI OBJECT_ID ('Table1', 'U') N'EST PAS NUL TABLE DROP TABLE1 CREATE TABLE Table1 (Id INT, FruitName Varchar (100)); SI OBJECT_ID ('Table2', 'U') N'EST PAS NUL TABLE DROP TABLE2 CREATE TABLE Table2 (Id INT, FruitName Varchar (100)); Insérer dans le tableau 1 Valeurs (1, 'Mangue'), (2, 'Graps'), (3, 'Banane'); Insérer dans le tableau 2 Valeurs (1, 'Mangue'), (2, NULL), (3, NULL); SELECT * FROM Table1; SELECT * FROM Table2; UPDATE T2 SET T2. FruitName = T1 .FruitName FROM Table2 en tant que T2 INNER JOIN Table1 en tant que T1 sur T1. Id = T2 .Id; SELECT * FROM Table1; SELECT * FROM Table2; 

Dans l'exemple ci-dessus, les lignes de valeurs NULL dans Table2 sont mises à jour avec les lignes de Table1 en fonction d'une colonne d'ID correspondante.

Avant la mise à jour avec la jointure interne

Après mise à jour avec jointure interne

Supprimer à l'aide d'une jointure interne

En utilisant le même concept de jointure interne, nous pouvons supprimer les lignes d'une table basée sur une autre table à l'aide de la jointure interne.

Syntaxe de suppression avec jointure interne

SUPPRIMER T2 DE LA TABLE2 COMME T2 INTERNE JOINER Table1 T1 comme T1 ON T1. Id = T1 .Id; 

Pour simplifier la syntaxe, T2 est un nom d'alias pour Table2, dont nous voulons supprimer les lignes en fonction des lignes correspondantes avec Table1. La clause On spécifie les noms de colonnes pour rechercher les lignes correspondantes entre les deux tables à l'aide de Inner Join.

SI OBJECT_ID ('Table1', 'U') N'EST PAS NUL TABLE DROP TABLE1 CREATE TABLE Table1 (Id INT, FruitName Varchar (100)); SI OBJECT_ID ('Table2', 'U') N'EST PAS NUL TABLE DROP TABLE2 CREATE TABLE Table2 (Id INT, FruitName Varchar (100)); Insérer dans le tableau 1 Valeurs (1, 'Mangue'), (2, 'Graps'), (3, 'Banane'), (4, 'WaterMelon'), (5, 'Orange'); Insérer dans le tableau 2 Valeurs (1, 'Mangue'), (2, 'Graps'), (3, 'Banane'), (6, 'Poire'), (7, 'Papaye'); SELECT * FROM Table1; SELECT * FROM Table2; SUPPRIMER T2 DE LA TABLE2 COMME T2 INTERNE JOINER Table1 T1 comme T1 ON T1. Id = T2 .Id; SELECT * FROM Table1; SELECT * FROM Table2; 

Dans l'exemple ci-dessus, les lignes avec Id (1,2,3) sont supprimées de la table T2 car elles correspondent à la colonne Table1 (Id) avec jointure Inner.

Avant suppression avec jointure interne

Après suppression avec jointure interne

Actuellement, SQL Server ne prend pas en charge la suppression de lignes des deux tables à l’aide d’une seule instruction delete, comme les autres SGBDR.

Voir aussi Archives SQL Server